<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
  <channel>
    <title>여리의 기술블로그</title>
    <link>https://yeoli-tech.tistory.com/</link>
    <description></description>
    <language>ko</language>
    <pubDate>Fri, 17 Apr 2026 02:45:34 +0900</pubDate>
    <generator>TISTORY</generator>
    <ttl>100</ttl>
    <managingEditor>엔지니어-여리</managingEditor>
    <image>
      <title>여리의 기술블로그</title>
      <url>https://tistory1.daumcdn.net/tistory/5202696/attach/adb28d9cba9a4d1b85c63a76a703a5fd</url>
      <link>https://yeoli-tech.tistory.com</link>
    </image>
    <item>
      <title>Databricks Auto Loader: Legacy File Notification에서 Managed File Events로 전환하기</title>
      <link>https://yeoli-tech.tistory.com/54</link>
      <description>&lt;h2 data-ke-size=&quot;size26&quot;&gt;TL;DR&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;S3 버킷당 Event Notification 100개 제한에 부딪혀 Managed File Events(MFE)로 전환했습니다. 공식 문서는 간단해 보이지만, &lt;b&gt;CDC 환경에서는 자칫 잘못하면 데이터 유실이 발상할 수 있습니다. &lt;/b&gt;이 글에서는 CDC 파이프라인에서 MFE로 안전하게 전환하는 방법과,&amp;nbsp; 놓치기 쉬운 내용들을 다룹니다.&lt;/p&gt;
&lt;hr data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;문제 상황: S3 Event Notification 한계에 부딪히다&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Aurora MySQL에서 DMS를 통해 S3로 CDC 데이터를 적재하고, Databricks Delta Live Tables(DLT)로 ETL 파이프라인을 운영하고 있었습니다. 초기에는 Auto Loader의 Legacy File Notification 모드를 사용했는데, 파이프라인이 늘어나면서 한계에 도달했습니다.&lt;br /&gt;S3 버킷당 Event Notification 설정은 최대 100개로 제한됩니다.(Hard Limit) Legacy File Notification 모드에서는 파이프라인마다 개별 SNS/SQS를 생성하기 때문에, 테이블 수가 늘어날수록 이 한계에 빠르게 도달합니다. 새로운 테이블을 추가하려면 기존 파이프라인을 통합하거나 버킷을 분리해야 하는 상황이 왔습니다.&lt;/p&gt;
&lt;hr data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;해결책: Managed File Events(MFE)&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Databricks의 Managed File Events는 이 문제를 해결해 줍니다. MFE는 Databricks가 관리하는 단일 SNS/SQS 인프라를 모든 파이프라인이 공유하는 방식입니다. 버킷당 1개의 Event Notification만 사용하므로 사실상 파이프라인 확장에 제한이 없어집니다.&lt;br /&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;MFE의 Trade-off&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;물론 MFE도 만능은 아닙니다. 공유 인프라를 사용하기 때문에 처리량 제한이 있습니다. AWS 환경에서는 초당 약 2,000건의 파일 이벤트 처리가 한계입니다. 대규모 배치성 파일 적재가 빈번한 환경이라면 이 제한을 고려해야 합니다. 다만 현재 저희 환경에서는 충분히 감당 가능한 수준이었습니다.&lt;/p&gt;
&lt;hr data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;왜 주의해야 하는가 : CDC 환경의 함정&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://docs.databricks.com/aws/en/ingestion/cloud-object-storage/auto-loader/migrating-to-file-events&quot; target=&quot;_self&quot;&gt;&lt;span&gt;공식 문서의 마이그레이션 절차&lt;/span&gt;&lt;/a&gt;는 다음을 안내합니다:&lt;/p&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;tearDownNotificationResources API로 기존 SNS/SQS 제거&lt;/li&gt;
&lt;li&gt;External Location에 File Events 활성화&lt;/li&gt;
&lt;li&gt;cloudFiles.useManagedFileEvents를 true로 설정&lt;/li&gt;
&lt;li&gt;기존 cloud-specific 옵션 제거&lt;/li&gt;
&lt;li&gt;스트림 재시작 (첫 실행 시 directory listing으로 동기화)&lt;/li&gt;
&lt;/ol&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;br /&gt;&lt;b&gt;이 절차는 소스 데이터 유입을 중단할 수 있는 환경에서는 동작합니다.&lt;/b&gt; 예를 들어 배치성 파일 적재라면, 적재를 잠시 멈추고 SQS의 모든 메시지를 처리한 뒤 전환하면 됩니다.&lt;br /&gt;하지만 &lt;b&gt;CDC 환경에서는 이야기가 다릅니다.&lt;/b&gt;&lt;br /&gt;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&lt;br /&gt;DMS는 계속 돌아가고 있고, S3에는 끊임없이 새 파일이 생성됩니다. 이 상태에서 tearDownNotificationResources를 호출하면 어떻게 될까요?&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;SQS에 아직 처리되지 않은 메시지가 남아있는 상태에서 큐가 삭제됩니다&lt;/li&gt;
&lt;li&gt;해당 메시지에 해당하는 파일들은 Auto Loader가 인식하지 못합니다&lt;/li&gt;
&lt;li&gt;&lt;b&gt;데이터 유실 발생&lt;/b&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;물론 DMS를 중단하고, SQS 메시지를 모두 소진한 뒤, MFE로 전환하고, 다시 DMS를 시작하는 방법도 있습니다. 하지만 이 방식은 다운타임이 길어지고, &quot;메시지를 충분히 다 받았다&quot;는 것을 확인하기도 쉽지 않습니다.&lt;br /&gt;결국 &lt;b&gt;CDC 환경에서 안전하게 전환하려면 Full Refresh가 필수&lt;/b&gt;입니다. 전환 과정에서 일부 데이터 유실이 발생할 수 있음을 인정하고, Full Refresh로 소스 데이터와 정합성을 다시 맞추는 것이 현실적인 방법이었습니다.&lt;/p&gt;
&lt;hr data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;문서에서 살펴보기 어려웠던 것들&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;CDC 환경의 문제 외에도, 실제 적용 과정에서 문서에서 놓치기 쉬운 함정들을 만났습니다.&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;1. 숨겨진 File Events 활성화 버튼&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;MFE를 사용하려면 External Location에서 File Events를 활성화해야 합니다. 문제는 이 설정 버튼이 UI에서 바로 보이지 않는다는 것입니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1590&quot; data-origin-height=&quot;914&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cnoReU/dJMcadHBd98/1UnUCUA5GM2unVvQlb14S1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cnoReU/dJMcadHBd98/1UnUCUA5GM2unVvQlb14S1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cnoReU/dJMcadHBd98/1UnUCUA5GM2unVvQlb14S1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcnoReU%2FdJMcadHBd98%2F1UnUCUA5GM2unVvQlb14S1%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;1590&quot; height=&quot;914&quot; data-origin-width=&quot;1590&quot; data-origin-height=&quot;914&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;2. Unity Catalog 권한 설정의 함정&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;DLT 파이프라인이 Unity Catalog를 사용한다면, 파이프라인 Runner(Service Principal 또는 User)에게 적절한 권한이 부여되어야 합니다. 문서에는 이 부분이 명확하게 설명되어 있지 않았습니다.&lt;br /&gt;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;3. S3 경로 표기법: s3a:// &amp;rarr; s3:// &lt;b&gt;(중요)&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이건 정말 예상하지 못한 부분이었습니다. 기존 Legacy File Notification 모드에서는 s3a://bucket-name/path 형식을 사용했습니다. MFE로 전환 후 동일한 경로를 사용했더니 파일을 인식하지 못했습니다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 부분을 수정하지 않으면, 파이프라인은 정상적으로 돌지만 실제로 데이터를 가져오지 못하는 이슈가 발생합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;(참고) s3a:// 형식으로 기술했던 것은 Hadoop/Spark 오픈소스 생태계의 S3 접근 프로토콜. MFE 모드에서 스킴을 s3a로 해도 에러는 발생하지 않으나 실제로 동작하지 않음&lt;/span&gt;&lt;/p&gt;
&lt;div&gt;
&lt;div&gt;
&lt;pre class=&quot;vala&quot; style=&quot;color: #383a42; text-align: left;&quot;&gt;&lt;code&gt;# 기존 Legacy File Notification 모드
# path = &quot;s3a://my-bucket/cdc-data/&quot;

# MFE 모드에서는 이렇게 변경해야 합니다
path = &quot;s3://my-bucket/cdc-data/&quot;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&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;h3 data-ke-size=&quot;size23&quot;&gt;4. 제거해야 하는 기존 옵션들&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;문서에서는 cloudFiles.queueUrl 같은 cloud-specific 옵션을 제거하라고 안내하고 있습니다. 하지만 실제로는 문서에 언급되지 않은 옵션들도 제거해야 했습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;cloudFiles.queueName&lt;br /&gt;cloudFiles.subscription&lt;span style=&quot;color: #1b3139; text-align: start;&quot;&gt;&lt;span&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;databricks.serviceCredential&lt;span style=&quot;color: #1b3139; text-align: start;&quot;&gt;&lt;span&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;cloudFiles.privateKey&lt;span style=&quot;color: #1b3139; text-align: start;&quot;&gt;&lt;br /&gt;&lt;/span&gt;cloudFiles.clientSecret&lt;br /&gt;&lt;br /&gt;&lt;/p&gt;
&lt;hr data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;실제 마이그레이션 과정&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;CDC 환경에서 데이터 유실 없이 MFE로 전환한 실제 과정입니다.&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;Step 1. 모든 관련 파이프라인 중지&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;전환 대상 DLT 파이프라인들을 모두 중지합니다. 이 시점부터 DMS가 S3에 적재하는 파일들은 처리되지 않습니다.&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;Step 2. 기존 Notification 리소스 제거&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;tearDownNotificationResources API를 사용하여 기존 SNS/SQS 리소스를 제거합니다. 이때 SQS에 남아있던 미처리 메시지는 유실됩니다.&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;Step 3. MFE 설정 적용&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;External Location에서 File Events 활성화&lt;/li&gt;
&lt;li&gt;노트북 코드에서 S3 경로를 s3:// 형식으로 변경&lt;/li&gt;
&lt;li&gt;cloudFiles.useManagedFileEvents = true 설정&lt;/li&gt;
&lt;li&gt;기존 cloud-specific 옵션 및 불필요한 옵션 제거&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;Step 4. 파이프라인 재시작 및 Full Refresh 실행&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;파이프라인을 재시작하고, 해당 파이프라인에 참조되는 모든 테이블에 대해 Full Refresh를 실행합니다. 이 과정에서 소스 데이터와 정합성이 다시 맞춰집니다.&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;Step 5. 검증&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;External Location의 Test Connection 기능으로 File Events가 정상 동작하는지 확인하고, 데이터 정합성을 검증합니다.&lt;/p&gt;
&lt;hr data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;덤으로 얻은 것: 파이프라인 분리와 고가용성&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이번 작업을 계기로 기존에 단일 스키마로 운영하던 구조를 소스 DB 스키마 기준으로 분리했습니다. 이전에는 하나의 거대한 파이프라인이 모든 테이블을 처리했다면, 이제는 스키마별로 독립된 파이프라인이 동작합니다.&lt;br /&gt;이 구조 변경으로 얻은 이점:&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;장애 격리&lt;/b&gt;: 특정 스키마에 문제가 생겨도 다른 스키마의 데이터 처리에 영향을 주지 않습니다&lt;/li&gt;
&lt;li&gt;&lt;b&gt;운영 유연성&lt;/b&gt;: 스키마 단위로 Full Refresh나 장애 대응이 가능해져 운영 부담이 줄었습니다&lt;/li&gt;
&lt;li&gt;&lt;b&gt;데이터 일관성&lt;/b&gt;: 각 파이프라인의 데이터 일관성 경계가 명확해졌습니다&lt;/li&gt;
&lt;/ul&gt;
&lt;hr data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;마이그레이션 체크리스트&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;비슷한 전환을 계획하고 계신 분들을 위해 체크리스트를 정리했습니다.&lt;br /&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&gt;Databricks Runtime 14.3 LTS 이상 사용 여부 확인&lt;/li&gt;
&lt;li&gt;Unity Catalog 활성화 여부 확인&lt;/li&gt;
&lt;li&gt;필요한 권한 확보 (CREATE STORAGE CREDENTIAL, CREATE EXTERNAL LOCATION 등)&lt;/li&gt;
&lt;li&gt;Full Refresh 소요 시간 산정 및 다운타임 확보&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&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&gt;모든 관련 DLT 파이프라인 중지&lt;/li&gt;
&lt;li&gt;tearDownNotificationResources API로 기존 리소스 제거&lt;/li&gt;
&lt;li&gt;External Location에 File Events 활성화&lt;/li&gt;
&lt;li&gt;노트북 코드에서 S3 경로를 s3:// 형식으로 변경&lt;/li&gt;
&lt;li&gt;cloudFiles.useManagedFileEvents = true 설정&lt;/li&gt;
&lt;li&gt;기존 cloud-specific 옵션 및 불필요한 옵션 제거&lt;/li&gt;
&lt;li&gt;파이프라인 재시작 및 Full Refresh 실행&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&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&gt;External Location의 Test Connection으로 File Events 정상 동작 확인&lt;/li&gt;
&lt;li&gt;데이터 정합성 검증&lt;/li&gt;
&lt;/ul&gt;
&lt;hr data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;마치며&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;MFE 전환 자체는 올바른 선택이었습니다. S3 Event Notification 제한에서 벗어나 파이프라인 확장성을 확보했고, 부수적으로 아키텍처도 개선할 수 있었습니다.&lt;br /&gt;다만 &lt;b&gt;CDC 환경에서는 주의하지 않으면 데이터가 유실됩니다.&lt;/b&gt; 문서는 소스 데이터 유입을 중단할 수 있는 환경을 전제로 작성되어 있기 때문입니다. CDC 파이프라인을 운영하고 계신다면, Full Refresh를 위한 충분한 다운타임을 확보하시길 권합니다.&lt;/p&gt;
&lt;hr data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;참고 자료&lt;/h2&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;a href=&quot;https://docs.databricks.com/aws/en/ingestion/cloud-object-storage/auto-loader/migrating-to-file-events&quot; target=&quot;_self&quot;&gt;&lt;span&gt;Databricks 공식 문서: Migrate to Auto Loader with file events&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://docs.databricks.com/aws/en/ingestion/cloud-object-storage/auto-loader/file-events-explained&quot; target=&quot;_self&quot;&gt;&lt;span&gt;Databricks 공식 문서: Auto Loader with file events overview&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://docs.databricks.com/aws/en/ingestion/cloud-object-storage/auto-loader/production&quot; target=&quot;_self&quot;&gt;&lt;span&gt;Databricks 공식 문서: Configure Auto Loader for production workloads&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</description>
      <category>data platform</category>
      <category>databricks</category>
      <category>ETL pipeline</category>
      <author>엔지니어-여리</author>
      <guid isPermaLink="true">https://yeoli-tech.tistory.com/54</guid>
      <comments>https://yeoli-tech.tistory.com/54#entry54comment</comments>
      <pubDate>Mon, 2 Feb 2026 01:49:35 +0900</pubDate>
    </item>
    <item>
      <title>Cursor에서 Bedrock최신 모델을 써봅시다.</title>
      <link>https://yeoli-tech.tistory.com/53</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;Cursor에서는 다양한 생성형 AI 모델을 제공해줍니다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;무료로 사용하는 사람들도 조금은 사용할 수 있지만 조금 쓰다보면 quota를 넘기기 일쑤입니다. 그래서 많은 사람들이 Cursor를 Pro plan 이상으로 비용을 내면서 사용하고 있습니다. 오늘은 cursor AI의 OpenAI 모델을 Bedrock Access Gateway로 대체하여 Cursor + Bedrock 연동을 해보도록 하겠습니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1451&quot; data-origin-height=&quot;729&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bh1LrV/btsMHqxHEM9/8SGatpYJOx7tHj2DLW0Qzk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bh1LrV/btsMHqxHEM9/8SGatpYJOx7tHj2DLW0Qzk/img.png&quot; data-alt=&quot;Cursor AI의 plan별 비용&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bh1LrV/btsMHqxHEM9/8SGatpYJOx7tHj2DLW0Qzk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbh1LrV%2FbtsMHqxHEM9%2F8SGatpYJOx7tHj2DLW0Qzk%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;1451&quot; height=&quot;729&quot; data-origin-width=&quot;1451&quot; data-origin-height=&quot;729&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;Cursor AI의 plan별 비용&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;먼저 Bedrock Access Gateway를 구성해봅시다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그 전에 사용하고자 하는 Bedrock 모델을 활성화 해줍니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://us-west-2.console.aws.amazon.com/bedrock/home?region=us-west-2#/modelaccess&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://us-west-2.console.aws.amazon.com/bedrock/home?region=us-west-2#/modelaccess&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1741697452494&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;https://us-west-2.console.aws.amazon.com/bedrock/home?region=us-west-2#/modelaccess&quot; data-og-description=&quot;&quot; data-og-host=&quot;us-west-2.console.aws.amazon.com&quot; data-og-source-url=&quot;https://us-west-2.console.aws.amazon.com/bedrock/home?region=us-west-2#/modelaccess&quot; data-og-url=&quot;https://us-west-2.console.aws.amazon.com/bedrock/home?region=us-west-2#/modelaccess&quot; data-og-image=&quot;&quot;&gt;&lt;a href=&quot;https://us-west-2.console.aws.amazon.com/bedrock/home?region=us-west-2#/modelaccess&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://us-west-2.console.aws.amazon.com/bedrock/home?region=us-west-2#/modelaccess&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url();&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;https://us-west-2.console.aws.amazon.com/bedrock/home?region=us-west-2#/modelaccess&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;us-west-2.console.aws.amazon.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;901&quot; data-origin-height=&quot;264&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/GZ7w0/btsMGA8DHiU/prLAnjw6jagxPzT07CZlk0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/GZ7w0/btsMGA8DHiU/prLAnjw6jagxPzT07CZlk0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/GZ7w0/btsMGA8DHiU/prLAnjw6jagxPzT07CZlk0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FGZ7w0%2FbtsMGA8DHiU%2FprLAnjw6jagxPzT07CZlk0%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;901&quot; height=&quot;264&quot; data-origin-width=&quot;901&quot; data-origin-height=&quot;264&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Antropic 사의 Claude 3.7 Sonnet 모델을 활성화해줍니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2025-03-11 21.51.29.png&quot; data-origin-width=&quot;1279&quot; data-origin-height=&quot;146&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cw7TpN/btsMIEBLhpb/OsXD4XdLzpyVYrCq8G7bWk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cw7TpN/btsMIEBLhpb/OsXD4XdLzpyVYrCq8G7bWk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cw7TpN/btsMIEBLhpb/OsXD4XdLzpyVYrCq8G7bWk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fcw7TpN%2FbtsMIEBLhpb%2FOsXD4XdLzpyVYrCq8G7bWk%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;1279&quot; height=&quot;146&quot; data-filename=&quot;스크린샷 2025-03-11 21.51.29.png&quot; data-origin-width=&quot;1279&quot; data-origin-height=&quot;146&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그 다음, secrets manager 서비스에서 secrets 를 만들어줍니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2025-03-11 21.54.28.png&quot; data-origin-width=&quot;1663&quot; data-origin-height=&quot;806&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/TwNIk/btsMHlJ1MUU/BWGmPyECKNeWkPOkrGNPX1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/TwNIk/btsMHlJ1MUU/BWGmPyECKNeWkPOkrGNPX1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/TwNIk/btsMHlJ1MUU/BWGmPyECKNeWkPOkrGNPX1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FTwNIk%2FbtsMHlJ1MUU%2FBWGmPyECKNeWkPOkrGNPX1%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;1663&quot; height=&quot;806&quot; data-filename=&quot;스크린샷 2025-03-11 21.54.28.png&quot; data-origin-width=&quot;1663&quot; data-origin-height=&quot;806&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;api_key: bedrock 으로 key:value pair를 만들어줍니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1655&quot; data-origin-height=&quot;860&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bB2Q5V/btsMHTl9QqD/H6dcBblrqx4rLvCYQu2kMK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bB2Q5V/btsMHTl9QqD/H6dcBblrqx4rLvCYQu2kMK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bB2Q5V/btsMHTl9QqD/H6dcBblrqx4rLvCYQu2kMK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbB2Q5V%2FbtsMHTl9QqD%2FH6dcBblrqx4rLvCYQu2kMK%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;1655&quot; height=&quot;860&quot; data-origin-width=&quot;1655&quot; data-origin-height=&quot;860&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;secrets 이름은 BedrockProxyAPIKey로 하겠습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이후에, Bedrock Access Gateway를 구성하기 위해 bedrock access gateway github page에 방문합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://github.com/aws-samples/bedrock-access-gateway&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://github.com/aws-samples/bedrock-access-gateway&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1741697558942&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;object&quot; data-og-title=&quot;GitHub - aws-samples/bedrock-access-gateway: OpenAI-Compatible RESTful APIs for Amazon Bedrock&quot; data-og-description=&quot;OpenAI-Compatible RESTful APIs for Amazon Bedrock. Contribute to aws-samples/bedrock-access-gateway development by creating an account on GitHub.&quot; data-og-host=&quot;github.com&quot; data-og-source-url=&quot;https://github.com/aws-samples/bedrock-access-gateway&quot; data-og-url=&quot;https://github.com/aws-samples/bedrock-access-gateway&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/KQrOW/hyYqMhhoCM/t1AVmKlTmcN0MIwB4qtC50/img.png?width=1200&amp;amp;height=600&amp;amp;face=0_0_1200_600,https://scrap.kakaocdn.net/dn/deOjMZ/hyYp9X0D9R/NTfxEIwt4FiQL18Ki1110K/img.png?width=1200&amp;amp;height=600&amp;amp;face=0_0_1200_600&quot;&gt;&lt;a href=&quot;https://github.com/aws-samples/bedrock-access-gateway&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://github.com/aws-samples/bedrock-access-gateway&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/KQrOW/hyYqMhhoCM/t1AVmKlTmcN0MIwB4qtC50/img.png?width=1200&amp;amp;height=600&amp;amp;face=0_0_1200_600,https://scrap.kakaocdn.net/dn/deOjMZ/hyYp9X0D9R/NTfxEIwt4FiQL18Ki1110K/img.png?width=1200&amp;amp;height=600&amp;amp;face=0_0_1200_600');&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;GitHub - aws-samples/bedrock-access-gateway: OpenAI-Compatible RESTful APIs for Amazon Bedrock&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;OpenAI-Compatible RESTful APIs for Amazon Bedrock. Contribute to aws-samples/bedrock-access-gateway development by creating an account on GitHub.&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;github.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;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;가운데 CloudFormation stack 링크를 제공해줍니다. ALB + Fargate 1-Click Deploy 버튼을 눌러 Cloudformation 페이지로 접근합니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2025-03-11 21.52.47.png&quot; data-origin-width=&quot;852&quot; data-origin-height=&quot;240&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/TO2HI/btsMFJSDy0X/m0Fp0MNMtqLhHMrvskBy9K/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/TO2HI/btsMFJSDy0X/m0Fp0MNMtqLhHMrvskBy9K/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/TO2HI/btsMFJSDy0X/m0Fp0MNMtqLhHMrvskBy9K/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FTO2HI%2FbtsMFJSDy0X%2Fm0Fp0MNMtqLhHMrvskBy9K%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;852&quot; height=&quot;240&quot; data-filename=&quot;스크린샷 2025-03-11 21.52.47.png&quot; data-origin-width=&quot;852&quot; data-origin-height=&quot;240&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2025-03-11 21.53.32.png&quot; data-origin-width=&quot;1684&quot; data-origin-height=&quot;1176&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cq08Lc/btsMINL7TAS/rwfxlaTK5gqtqoBp6bVF6K/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cq08Lc/btsMINL7TAS/rwfxlaTK5gqtqoBp6bVF6K/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cq08Lc/btsMINL7TAS/rwfxlaTK5gqtqoBp6bVF6K/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fcq08Lc%2FbtsMINL7TAS%2FrwfxlaTK5gqtqoBp6bVF6K%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;1684&quot; height=&quot;1176&quot; data-filename=&quot;스크린샷 2025-03-11 21.53.32.png&quot; data-origin-width=&quot;1684&quot; data-origin-height=&quot;1176&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;여기서 ApiKeySecretArn은 앞서 만든 secret의 arn 을 넣어줍니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;719&quot; data-origin-height=&quot;301&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/b1tToM/btsMF4Cimmw/OhR7OT0iCz1cqBjAvQ47Nk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/b1tToM/btsMF4Cimmw/OhR7OT0iCz1cqBjAvQ47Nk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/b1tToM/btsMF4Cimmw/OhR7OT0iCz1cqBjAvQ47Nk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fb1tToM%2FbtsMF4Cimmw%2FOhR7OT0iCz1cqBjAvQ47Nk%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;719&quot; height=&quot;301&quot; data-origin-width=&quot;719&quot; data-origin-height=&quot;301&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그 다음 DefaultModelId는 아까 활성화한 model을 쓰고 싶습니다.&amp;nbsp; 신나게 bedrock service로 가서 model ID를 복사해서 붙여넣으시면 동작하지 않습니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;801&quot; data-origin-height=&quot;716&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/nbtG4/btsMHgoAbZU/5wAwgHtpQKwkdVKMqfiA9K/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/nbtG4/btsMHgoAbZU/5wAwgHtpQKwkdVKMqfiA9K/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/nbtG4/btsMHgoAbZU/5wAwgHtpQKwkdVKMqfiA9K/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FnbtG4%2FbtsMHgoAbZU%2F5wAwgHtpQKwkdVKMqfiA9K%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;801&quot; height=&quot;716&quot; data-origin-width=&quot;801&quot; data-origin-height=&quot;716&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;bedrock access gateway github에서 &lt;a href=&quot;https://github.com/aws-samples/bedrock-access-gateway/blob/main/docs/Usage.md#reasoning&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://github.com/aws-samples/bedrock-access-gateway/blob/main/docs/Usage.md#reasoning&lt;/a&gt; 페이지를 보시면 model ID가 있습니다. 이걸 사용합니다.&lt;/p&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;blockquote data-ke-style=&quot;style1&quot;&gt;
&lt;pre class=&quot;angelscript&quot; style=&quot;background-color: #151b23; color: #f0f6fc; text-align: start;&quot;&gt;&lt;code&gt;us.anthropic.claude-3-7-sonnet-20250219-v1:0&lt;/code&gt;&lt;/pre&gt;
&lt;/blockquote&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&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;867&quot; data-origin-height=&quot;450&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/Bn4sY/btsMFHN3KzV/lrzkcJ4KAsQfRvRiXSibk1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/Bn4sY/btsMFHN3KzV/lrzkcJ4KAsQfRvRiXSibk1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/Bn4sY/btsMFHN3KzV/lrzkcJ4KAsQfRvRiXSibk1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FBn4sY%2FbtsMFHN3KzV%2FlrzkcJ4KAsQfRvRiXSibk1%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;867&quot; height=&quot;450&quot; data-origin-width=&quot;867&quot; data-origin-height=&quot;450&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&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 data-ke-size=&quot;size16&quot;&gt;Cloudformation 배포를 기다린 다음 Outputs 탭에 보시면 URL이 하나 있는 것을 확인할 수 있습니다. 이걸 복사합니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;749&quot; data-origin-height=&quot;413&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/ba9jRX/btsMHTflgId/JbG3z9vwj8jKbJ6bPREMzK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/ba9jRX/btsMHTflgId/JbG3z9vwj8jKbJ6bPREMzK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/ba9jRX/btsMHTflgId/JbG3z9vwj8jKbJ6bPREMzK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fba9jRX%2FbtsMHTflgId%2FJbG3z9vwj8jKbJ6bPREMzK%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;749&quot; height=&quot;413&quot; data-origin-width=&quot;749&quot; data-origin-height=&quot;413&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&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 data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;자 마지막으로 cursor 에서&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2025-03-11 22.03.40.png&quot; data-origin-width=&quot;419&quot; data-origin-height=&quot;147&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/VbdfS/btsMHUk2JvZ/N31JQUeAWFaT6Vi5huQxU1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/VbdfS/btsMHUk2JvZ/N31JQUeAWFaT6Vi5huQxU1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/VbdfS/btsMHUk2JvZ/N31JQUeAWFaT6Vi5huQxU1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FVbdfS%2FbtsMHUk2JvZ%2FN31JQUeAWFaT6Vi5huQxU1%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;419&quot; height=&quot;147&quot; data-filename=&quot;스크린샷 2025-03-11 22.03.40.png&quot; data-origin-width=&quot;419&quot; data-origin-height=&quot;147&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;기본설정 - Cursor Settings를 선택해 설정 화면에서 Models를 선택합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;OpenAI API Key는 아까 secrets에서 api_key의 값으로 넣은 &lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;b&gt;bedrock&lt;/b&gt;&lt;/span&gt;을 넣어줍니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Override OpenAI Base URL에는 cloudformation에서 Output으로 나왔던 url을 넣어줍니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1192&quot; data-origin-height=&quot;1167&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/xTYfh/btsMIepMxvz/CAu4R9qd2BkZKr9WVgeg7k/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/xTYfh/btsMIepMxvz/CAu4R9qd2BkZKr9WVgeg7k/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/xTYfh/btsMIepMxvz/CAu4R9qd2BkZKr9WVgeg7k/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FxTYfh%2FbtsMIepMxvz%2FCAu4R9qd2BkZKr9WVgeg7k%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;1192&quot; height=&quot;1167&quot; data-origin-width=&quot;1192&quot; data-origin-height=&quot;1167&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;모두 입력 후 Save 버튼을 누르고, Verify 버튼을 눌러 줍니다. 그리고 Enable OpenAI API Key 버튼을 클릭해줍니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;878&quot; data-origin-height=&quot;299&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/623XV/btsMF43lqqC/i0cKxSRkjHcjZPgP39jRjk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/623XV/btsMF43lqqC/i0cKxSRkjHcjZPgP39jRjk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/623XV/btsMF43lqqC/i0cKxSRkjHcjZPgP39jRjk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F623XV%2FbtsMF43lqqC%2Fi0cKxSRkjHcjZPgP39jRjk%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;878&quot; height=&quot;299&quot; data-origin-width=&quot;878&quot; data-origin-height=&quot;299&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&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 data-ke-size=&quot;size16&quot;&gt;우측 상단에 초록색으로 활성화가 되면 설정이 완료되었습니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;845&quot; data-origin-height=&quot;236&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bpv5ga/btsMFIzl1Ac/7xgDmMvEBwpXdHB5PFxv71/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bpv5ga/btsMFIzl1Ac/7xgDmMvEBwpXdHB5PFxv71/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bpv5ga/btsMFIzl1Ac/7xgDmMvEBwpXdHB5PFxv71/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbpv5ga%2FbtsMFIzl1Ac%2F7xgDmMvEBwpXdHB5PFxv71%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;845&quot; height=&quot;236&quot; data-origin-width=&quot;845&quot; data-origin-height=&quot;236&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;OpenAI 를 override 하였으므로, 모델은 gpt-4o로 설정해줍니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;AFT 코드를 읽혀봤더니 잘 읽는 것을 살펴볼 수 있습니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2025-03-11 22.09.27.png&quot; data-origin-width=&quot;1192&quot; data-origin-height=&quot;1167&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bxvbJ1/btsMF6z4Uml/sZVRoCBxI7W0t3dOcObtJK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bxvbJ1/btsMF6z4Uml/sZVRoCBxI7W0t3dOcObtJK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bxvbJ1/btsMF6z4Uml/sZVRoCBxI7W0t3dOcObtJK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbxvbJ1%2FbtsMF6z4Uml%2FsZVRoCBxI7W0t3dOcObtJK%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;1192&quot; height=&quot;1167&quot; data-filename=&quot;스크린샷 2025-03-11 22.09.27.png&quot; data-origin-width=&quot;1192&quot; data-origin-height=&quot;1167&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>AWS</category>
      <author>엔지니어-여리</author>
      <guid isPermaLink="true">https://yeoli-tech.tistory.com/53</guid>
      <comments>https://yeoli-tech.tistory.com/53#entry53comment</comments>
      <pubDate>Tue, 11 Mar 2025 22:10:34 +0900</pubDate>
    </item>
    <item>
      <title>[KANS 3기] 9주차 VPC CNI</title>
      <link>https://yeoli-tech.tistory.com/52</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;실습환경 구성&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;배포&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;cloudformation template를 적용하여 stack을 배포하겠습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;a style=&quot;color: #000000;&quot; href=&quot;https://s3.ap-northeast-2.amazonaws.com/cloudformation.cloudneta.net/kans/&quot;&gt;https://s3.ap-northeast-2.amazonaws.com/cloudformation.cloudneta.net/kans/&lt;/a&gt;eks-oneclick.yaml&lt;/span&gt;&lt;/p&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&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2024-10-30 오후 11.28.33.png&quot; data-origin-width=&quot;1809&quot; data-origin-height=&quot;1527&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/zjPne/btsKoZXzowA/oATkz7phDHHftME7W6klw0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/zjPne/btsKoZXzowA/oATkz7phDHHftME7W6klw0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/zjPne/btsKoZXzowA/oATkz7phDHHftME7W6klw0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FzjPne%2FbtsKoZXzowA%2FoATkz7phDHHftME7W6klw0%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;1809&quot; height=&quot;1527&quot; data-filename=&quot;스크린샷 2024-10-30 오후 11.28.33.png&quot; data-origin-width=&quot;1809&quot; data-origin-height=&quot;1527&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&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 data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;stack 이름을 myeks로 설정한 다음 배포해줍니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1809&quot; data-origin-height=&quot;1527&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/z66ch/btsKqWER4o1/u4VDgnSSqxxOKbmoaW0Fok/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/z66ch/btsKqWER4o1/u4VDgnSSqxxOKbmoaW0Fok/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/z66ch/btsKqWER4o1/u4VDgnSSqxxOKbmoaW0Fok/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fz66ch%2FbtsKqWER4o1%2Fu4VDgnSSqxxOKbmoaW0Fok%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;1809&quot; height=&quot;1527&quot; data-origin-width=&quot;1809&quot; data-origin-height=&quot;1527&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;cloudformation stack이 모두 완료되는 시간은 20분정도 소요될 수 있습니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2024-10-31 오전 12.25.24.png&quot; data-origin-width=&quot;312&quot; data-origin-height=&quot;418&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cxStKM/btsKp9LMaSk/6HUvltKjQPuieVoHVH4nXK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cxStKM/btsKp9LMaSk/6HUvltKjQPuieVoHVH4nXK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cxStKM/btsKp9LMaSk/6HUvltKjQPuieVoHVH4nXK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcxStKM%2FbtsKp9LMaSk%2F6HUvltKjQPuieVoHVH4nXK%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;312&quot; height=&quot;418&quot; data-filename=&quot;스크린샷 2024-10-31 오전 12.25.24.png&quot; data-origin-width=&quot;312&quot; data-origin-height=&quot;418&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;모든 리소스가 생성된 이후에는 ec2에서 bastion host를 통해서 클러스터에 접근할 수 있습니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2024-10-31 오전 12.27.00.png&quot; data-origin-width=&quot;1809&quot; data-origin-height=&quot;1527&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/d4cl5z/btsKpupicnD/CK2EPWas8RufuLevk4DT2k/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/d4cl5z/btsKpupicnD/CK2EPWas8RufuLevk4DT2k/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/d4cl5z/btsKpupicnD/CK2EPWas8RufuLevk4DT2k/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fd4cl5z%2FbtsKpupicnD%2FCK2EPWas8RufuLevk4DT2k%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;1809&quot; height=&quot;1527&quot; data-filename=&quot;스크린샷 2024-10-31 오전 12.27.00.png&quot; data-origin-width=&quot;1809&quot; data-origin-height=&quot;1527&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;배포 확인&lt;/h3&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2024-10-31 오전 12.27.28.png&quot; data-origin-width=&quot;1037&quot; data-origin-height=&quot;845&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/xZaP1/btsKqvVhk46/IkkggzrRjpBo5nmx4TS7D1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/xZaP1/btsKqvVhk46/IkkggzrRjpBo5nmx4TS7D1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/xZaP1/btsKqvVhk46/IkkggzrRjpBo5nmx4TS7D1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FxZaP1%2FbtsKqvVhk46%2FIkkggzrRjpBo5nmx4TS7D1%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;1037&quot; height=&quot;845&quot; data-filename=&quot;스크린샷 2024-10-31 오전 12.27.28.png&quot; data-origin-width=&quot;1037&quot; data-origin-height=&quot;845&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1730302845958&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;# default 네임스페이스 적용
kubectl ns default

# 설치 확인
kubectl cluster-info

# 클러스터 정보 확인
eksctl get cluster

# 클러스터 노드그룹 정보 확인
eksctl get nodegroup --cluster $CLUSTER_NAME

# 클러스터 구성정보 확인
kubectl config view&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2024-10-31 오전 12.31.30.png&quot; data-origin-width=&quot;1037&quot; data-origin-height=&quot;1209&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cPMXAG/btsKpWsp8XS/CaFIWIud1akwHY7UOfpMNK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cPMXAG/btsKpWsp8XS/CaFIWIud1akwHY7UOfpMNK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cPMXAG/btsKpWsp8XS/CaFIWIud1akwHY7UOfpMNK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcPMXAG%2FbtsKpWsp8XS%2FCaFIWIud1akwHY7UOfpMNK%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;1037&quot; height=&quot;1209&quot; data-filename=&quot;스크린샷 2024-10-31 오전 12.31.30.png&quot; data-origin-width=&quot;1037&quot; data-origin-height=&quot;1209&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1730302976959&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;# node 조회
kubectl get node --label-columns=node.kubernetes.io/instance-type,eks.amazonaws.com/capacityType,topology.kubernetes.io/zone

# iam identity mapping
eksctl get iamidentitymapping --cluster myeks

# krew 플러그인 확인
kubectl krew list

# 모든 네임스페이스에서 모든 리소스 확인
kubectl get-all&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2024-10-31 오전 12.32.30.png&quot; data-origin-width=&quot;1037&quot; data-origin-height=&quot;1209&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/blvtUs/btsKrerJyck/biAUfRnHIayi4oeb6O2Cw0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/blvtUs/btsKrerJyck/biAUfRnHIayi4oeb6O2Cw0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/blvtUs/btsKrerJyck/biAUfRnHIayi4oeb6O2Cw0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FblvtUs%2FbtsKrerJyck%2FbiAUfRnHIayi4oeb6O2Cw0%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;1037&quot; height=&quot;1209&quot; data-filename=&quot;스크린샷 2024-10-31 오전 12.32.30.png&quot; data-origin-width=&quot;1037&quot; data-origin-height=&quot;1209&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;pre id=&quot;code_1730303020164&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;# 클러스터에 설치된 add on 조회
eksctl get addon --cluster $CLUSTER_NAME&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2024-10-31 오전 12.43.24.png&quot; data-origin-width=&quot;1037&quot; data-origin-height=&quot;705&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cem3Zp/btsKqZBBkIO/Aok1khPEeY2wIg8A48xPb0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cem3Zp/btsKqZBBkIO/Aok1khPEeY2wIg8A48xPb0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cem3Zp/btsKqZBBkIO/Aok1khPEeY2wIg8A48xPb0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fcem3Zp%2FbtsKqZBBkIO%2FAok1khPEeY2wIg8A48xPb0%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;1037&quot; height=&quot;705&quot; data-filename=&quot;스크린샷 2024-10-31 오전 12.43.24.png&quot; data-origin-width=&quot;1037&quot; data-origin-height=&quot;705&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;VPC CNI&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;소개&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;파드가 VPC의 ip를 직접 사용하므로, VPC내 다른 리소스와 원활하게 통신할 수 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;오버레이 네트워크를 사용하지 않아서 네트워크 성능이 우수합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;CNI 플러그인은 노드에서 ENI를 관리합니다. 노드가 프로비저닝되면 CNI 플러그인은 노드의 서브넷에서 기본 ENI로 슬롯 풀(IP 또는 접두사)을 자동으로 할당합니다. 이를 &lt;b&gt;웜 풀&lt;/b&gt;이라고 하며 크기는 노드의 인스턴스 유형에 따라 결정됩니다. CNI 설정에 따라 슬롯은 IP 주소 또는 접두사가 될 수 있습니다. ENI의 슬롯이 할당되면 CNI는 슬롯의 웜 풀이 있는 추가 ENI를 노드에 연결할 수 있습니다. 이러한 추가 ENI를 &lt;b&gt;보조 ENI&lt;/b&gt;라고 합니다. 각 ENI는 인스턴스 유형에 따라 특정 수의 슬롯만 지원할 수 있습니다. CNI는 필요한 슬롯 수에 따라 인스턴스에 더 많은 ENI를 연결하며, 이는 일반적으로 Pod 수에 해당합니다. 이 프로세스는 노드가 더 이상 추가 ENI를 지원할 수 없을 때까지 계속됩니다. CNI는 또한 &lt;b&gt;더 빠른 Pod 시작을&lt;/b&gt; 위해 웜 ENI와 슬롯을 미리 할당합니다. 각 인스턴스 유형에는 연결할 수 있는 최대 ENI 수가 있습니다. 이는 컴퓨팅 리소스 외에도 Pod 밀도(노드당 Pod 수)에 대한 제약 조건 중 하나입니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;921&quot; data-origin-height=&quot;392&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bDZnn8/btsKpaEWXby/Rykp4Enk7wJ4gYDmxqJTm1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bDZnn8/btsKpaEWXby/Rykp4Enk7wJ4gYDmxqJTm1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bDZnn8/btsKpaEWXby/Rykp4Enk7wJ4gYDmxqJTm1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbDZnn8%2FbtsKpaEWXby%2FRykp4Enk7wJ4gYDmxqJTm1%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;921&quot; height=&quot;392&quot; data-origin-width=&quot;921&quot; data-origin-height=&quot;392&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;calico CNI vs VPC CNI&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;889&quot; data-origin-height=&quot;390&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bmxyBa/btsKqEkoMHJ/xCcqkug7dpcWkQhFdFj6v1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bmxyBa/btsKqEkoMHJ/xCcqkug7dpcWkQhFdFj6v1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bmxyBa/btsKqEkoMHJ/xCcqkug7dpcWkQhFdFj6v1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbmxyBa%2FbtsKqEkoMHJ%2FxCcqkug7dpcWkQhFdFj6v1%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;889&quot; height=&quot;390&quot; data-origin-width=&quot;889&quot; data-origin-height=&quot;390&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;1381&quot; data-origin-height=&quot;433&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/be0GSk/btsKqXKwNEZ/E8olgfk6gBLNKSIWPabMYk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/be0GSk/btsKqXKwNEZ/E8olgfk6gBLNKSIWPabMYk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/be0GSk/btsKqXKwNEZ/E8olgfk6gBLNKSIWPabMYk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbe0GSk%2FbtsKqXKwNEZ%2FE8olgfk6gBLNKSIWPabMYk%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;1381&quot; height=&quot;433&quot; data-origin-width=&quot;1381&quot; data-origin-height=&quot;433&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Calico CNI에는 오버레이를 통해 노드간 통신이 가능한 반면, VPC CNI는 VPC 와 같은 대역을 활용하기 때문에 파드간 통신을 같은 네트워크 내에서 가능합니다.&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;네트워크&lt;/h3&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&amp;nbsp;&lt;/h4&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;노드의 기본 네트워크&lt;/h4&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;757&quot; data-origin-height=&quot;787&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cNq09R/btsKq3qsyCl/kOqMLJk9UDohKSj2XcQrQK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cNq09R/btsKq3qsyCl/kOqMLJk9UDohKSj2XcQrQK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cNq09R/btsKq3qsyCl/kOqMLJk9UDohKSj2XcQrQK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcNq09R%2FbtsKq3qsyCl%2FkOqMLJk9UDohKSj2XcQrQK%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;757&quot; height=&quot;787&quot; data-origin-width=&quot;757&quot; data-origin-height=&quot;787&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2024-10-31 오전 1.32.53.png&quot; data-origin-width=&quot;1809&quot; data-origin-height=&quot;1527&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bJd9Kl/btsKpTWK9Ku/kAFjbEt3i27UD0OYiftZK1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bJd9Kl/btsKpTWK9Ku/kAFjbEt3i27UD0OYiftZK1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bJd9Kl/btsKpTWK9Ku/kAFjbEt3i27UD0OYiftZK1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbJd9Kl%2FbtsKpTWK9Ku%2FkAFjbEt3i27UD0OYiftZK1%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;1809&quot; height=&quot;1527&quot; data-filename=&quot;스크린샷 2024-10-31 오전 1.32.53.png&quot; data-origin-width=&quot;1809&quot; data-origin-height=&quot;1527&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;워커 노드에서 Private IP와 Secondary Private IP가 있는 것을 확인할 수 있습니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2024-10-31 오전 1.37.07.png&quot; data-origin-width=&quot;1169&quot; data-origin-height=&quot;705&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/ckY4Fd/btsKo79gfmb/HyBK7l5vvvkykISYJzP69K/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/ckY4Fd/btsKo79gfmb/HyBK7l5vvvkykISYJzP69K/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/ckY4Fd/btsKo79gfmb/HyBK7l5vvvkykISYJzP69K/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FckY4Fd%2FbtsKo79gfmb%2FHyBK7l5vvvkykISYJzP69K%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;1169&quot; height=&quot;705&quot; data-filename=&quot;스크린샷 2024-10-31 오전 1.37.07.png&quot; data-origin-width=&quot;1169&quot; data-origin-height=&quot;705&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;br /&gt;secondary private IP를 사용하는지 확인하기 위해 파드를 생성해보겠습니다.&lt;/p&gt;
&lt;pre id=&quot;code_1730306350065&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;cat &amp;lt;&amp;lt;EOF | kubectl apply -f -
apiVersion: apps/v1
kind: Deployment
metadata:
  name: netshoot-pod
spec:
  replicas: 3
  selector:
    matchLabels:
      app: netshoot-pod
  template:
    metadata:
      labels:
        app: netshoot-pod
    spec:
      containers:
      - name: netshoot-pod
        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;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2024-10-31 오전 1.37.50.png&quot; data-origin-width=&quot;1169&quot; data-origin-height=&quot;705&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dRryKt/btsKplTLE5s/R8AKAfW7T66QYvzystQIJ0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dRryKt/btsKplTLE5s/R8AKAfW7T66QYvzystQIJ0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dRryKt/btsKplTLE5s/R8AKAfW7T66QYvzystQIJ0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdRryKt%2FbtsKplTLE5s%2FR8AKAfW7T66QYvzystQIJ0%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;1169&quot; height=&quot;705&quot; data-filename=&quot;스크린샷 2024-10-31 오전 1.37.50.png&quot; data-origin-width=&quot;1169&quot; data-origin-height=&quot;705&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2024-10-31 오전 1.38.01.png&quot; data-origin-width=&quot;1809&quot; data-origin-height=&quot;1527&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/ccvn2o/btsKp80opyQ/Nx9knpK25vwCtVVJrnscHK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/ccvn2o/btsKp80opyQ/Nx9knpK25vwCtVVJrnscHK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/ccvn2o/btsKp80opyQ/Nx9knpK25vwCtVVJrnscHK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fccvn2o%2FbtsKp80opyQ%2FNx9knpK25vwCtVVJrnscHK%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;1809&quot; height=&quot;1527&quot; data-filename=&quot;스크린샷 2024-10-31 오전 1.38.01.png&quot; data-origin-width=&quot;1809&quot; data-origin-height=&quot;1527&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;새로운 파드를 생성하니, 보조 프라이빗 IP를 사용합니다.&lt;/p&gt;
&lt;pre id=&quot;code_1730306724388&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;# network 정보 조회
ip -br -c addr show
ip -c link
ip -c addr
ip route # 혹은 route -n&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2024-10-31 오전 1.41.51.png&quot; data-origin-width=&quot;1169&quot; data-origin-height=&quot;705&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/kRgEw/btsKqJsgrQ4/BAKlXbGTCpYy8eDDLKQebK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/kRgEw/btsKqJsgrQ4/BAKlXbGTCpYy8eDDLKQebK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/kRgEw/btsKqJsgrQ4/BAKlXbGTCpYy8eDDLKQebK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FkRgEw%2FbtsKqJsgrQ4%2FBAKlXbGTCpYy8eDDLKQebK%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;1169&quot; height=&quot;705&quot; data-filename=&quot;스크린샷 2024-10-31 오전 1.41.51.png&quot; data-origin-width=&quot;1169&quot; data-origin-height=&quot;705&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2024-10-31 오전 1.42.11.png&quot; data-origin-width=&quot;1169&quot; data-origin-height=&quot;705&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cuNH9b/btsKo9lHYyN/cE0dWkBK0ZaMY5sPkZc4Kk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cuNH9b/btsKo9lHYyN/cE0dWkBK0ZaMY5sPkZc4Kk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cuNH9b/btsKo9lHYyN/cE0dWkBK0ZaMY5sPkZc4Kk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcuNH9b%2FbtsKo9lHYyN%2FcE0dWkBK0ZaMY5sPkZc4Kk%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;1169&quot; height=&quot;705&quot; data-filename=&quot;스크린샷 2024-10-31 오전 1.42.11.png&quot; data-origin-width=&quot;1169&quot; data-origin-height=&quot;705&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;노드간 파드 통신&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span data-token-index=&quot;0&quot;&gt;파드간 통신 흐름&lt;/span&gt; : AWS VPC CNI 경우 별도의 &lt;span style=&quot;color: #337ea9;&quot; data-token-index=&quot;2&quot;&gt;오버레이&lt;/span&gt;(Overlay) 통신 기술 없이, VPC Native 하게 파드간 직접 통신이 가능하다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1576&quot; data-origin-height=&quot;648&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bsj5Ms/btsKo8790si/j5jCJsxj6OAB7etgWnvvC1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bsj5Ms/btsKo8790si/j5jCJsxj6OAB7etgWnvvC1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bsj5Ms/btsKo8790si/j5jCJsxj6OAB7etgWnvvC1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbsj5Ms%2FbtsKo8790si%2Fj5jCJsxj6OAB7etgWnvvC1%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;1576&quot; height=&quot;648&quot; data-origin-width=&quot;1576&quot; data-origin-height=&quot;648&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2024-10-31 오전 1.52.51.png&quot; data-origin-width=&quot;1169&quot; data-origin-height=&quot;705&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bYwA26/btsKqKEG3es/Yo4kfRWadoiZl2Fko9Kko0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bYwA26/btsKqKEG3es/Yo4kfRWadoiZl2Fko9Kko0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bYwA26/btsKqKEG3es/Yo4kfRWadoiZl2Fko9Kko0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbYwA26%2FbtsKqKEG3es%2FYo4kfRWadoiZl2Fko9Kko0%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;1169&quot; height=&quot;705&quot; data-filename=&quot;스크린샷 2024-10-31 오전 1.52.51.png&quot; data-origin-width=&quot;1169&quot; data-origin-height=&quot;705&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;파드에서 외부 통신&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span data-token-index=&quot;0&quot;&gt;파드에서 외부 통신&lt;/span&gt; 흐름 : iptable 에 SNAT 을 통하여 노드의 eth0 IP로 변경되어서 외부와 통신됨&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1453&quot; data-origin-height=&quot;464&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/tAhHd/btsKpCgBr7l/DQHVaVfNekZ1gCPkbdf4Q1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/tAhHd/btsKpCgBr7l/DQHVaVfNekZ1gCPkbdf4Q1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/tAhHd/btsKpCgBr7l/DQHVaVfNekZ1gCPkbdf4Q1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FtAhHd%2FbtsKpCgBr7l%2FDQHVaVfNekZ1gCPkbdf4Q1%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;1453&quot; height=&quot;464&quot; data-origin-width=&quot;1453&quot; data-origin-height=&quot;464&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;파드 생성 제한&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span data-token-index=&quot;0&quot;&gt;Secondary IPv4 addresses&lt;/span&gt; (기본값) : 인스턴스 유형에 최대 ENI 갯수와 할당 가능 IP 수를 조합하여 선정&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;인스턴스 타입&lt;/b&gt; 별 ENI 최대 갯수와 할당 가능한 최대 IP 갯수에 따라서 파드 배치 갯수가 결정됨&lt;/li&gt;
&lt;li&gt;단, aws-node 와 kube-proxy 파드는 호스트의 IP를 사용함으로 최대 갯수에서 제외함&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;932&quot; data-origin-height=&quot;787&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bKP4Vc/btsKpvIxq1d/iXk7EyslCvN9o6qr4Ew7Uk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bKP4Vc/btsKpvIxq1d/iXk7EyslCvN9o6qr4Ew7Uk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bKP4Vc/btsKpvIxq1d/iXk7EyslCvN9o6qr4Ew7Uk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbKP4Vc%2FbtsKpvIxq1d%2FiXk7EyslCvN9o6qr4Ew7Uk%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;932&quot; height=&quot;787&quot; data-origin-width=&quot;932&quot; data-origin-height=&quot;787&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style3&quot;&gt;최대 파드 생성 갯수 : (Number of network interfaces for the instance type &amp;times; (the number of IP addressess per network interface - 1)) + 2&lt;/blockquote&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 data-ke-size=&quot;size16&quot;&gt;인스턴스의 MaxENI 테이블 확인하는 방법&lt;/p&gt;
&lt;pre id=&quot;code_1730307493166&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;aws ec2 describe-instance-types --filters Name=instance-type,Values=t3.* \
 --query &quot;InstanceTypes[].{Type: InstanceType, MaxENI: NetworkInfo.MaximumNetworkInterfaces, IPv4addr: NetworkInfo.Ipv4AddressesPerInterface}&quot; \
 --output table&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2024-10-31 오전 1.57.59.png&quot; data-origin-width=&quot;239&quot; data-origin-height=&quot;187&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/uVbKE/btsKpEZOwI6/aKu5pCVoiWubqhIP2fpx7k/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/uVbKE/btsKpEZOwI6/aKu5pCVoiWubqhIP2fpx7k/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/uVbKE/btsKpEZOwI6/aKu5pCVoiWubqhIP2fpx7k/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FuVbKE%2FbtsKpEZOwI6%2FaKu5pCVoiWubqhIP2fpx7k%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;239&quot; height=&quot;187&quot; data-filename=&quot;스크린샷 2024-10-31 오전 1.57.59.png&quot; data-origin-width=&quot;239&quot; data-origin-height=&quot;187&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&amp;nbsp;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;최대 파드 생성 확인&lt;/p&gt;
&lt;pre id=&quot;code_1730307793475&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;# 디플로이먼트 생성
curl -s -O https://raw.githubusercontent.com/gasida/PKOS/main/2/nginx-dp.yaml
kubectl apply -f nginx-dp.yaml

# 파드 증가 to 8
kubectl scale deployment nginx-deployment --replicas=8

# 파드 증가 to 50
kubectl scale deployment nginx-deployment --replicas=50&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2024-10-31 오전 2.00.52.png&quot; data-origin-width=&quot;1169&quot; data-origin-height=&quot;705&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/c0NlYm/btsKpnquTSG/xXDmjgKLKKhtHfmoap40jK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/c0NlYm/btsKpnquTSG/xXDmjgKLKKhtHfmoap40jK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/c0NlYm/btsKpnquTSG/xXDmjgKLKKhtHfmoap40jK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fc0NlYm%2FbtsKpnquTSG%2FxXDmjgKLKKhtHfmoap40jK%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;1169&quot; height=&quot;705&quot; data-filename=&quot;스크린샷 2024-10-31 오전 2.00.52.png&quot; data-origin-width=&quot;1169&quot; data-origin-height=&quot;705&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;현재까지는 요청한 파드가 모두 생성되고 있음을 확인할 수 있습니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2024-10-31 오전 2.01.14.png&quot; data-origin-width=&quot;1169&quot; data-origin-height=&quot;971&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/btLDr5/btsKraQq8Lj/MAUpBa9CmqygU3bQC5xRu0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/btLDr5/btsKraQq8Lj/MAUpBa9CmqygU3bQC5xRu0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/btLDr5/btsKraQq8Lj/MAUpBa9CmqygU3bQC5xRu0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbtLDr5%2FbtsKraQq8Lj%2FMAUpBa9CmqygU3bQC5xRu0%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;1169&quot; height=&quot;971&quot; data-filename=&quot;스크린샷 2024-10-31 오전 2.01.14.png&quot; data-origin-width=&quot;1169&quot; data-origin-height=&quot;971&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;파드 갯수를 50개로 늘리자 Pending 인 파드가 하나씩 보이기 시작합니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2024-10-31 오전 2.02.16.png&quot; data-origin-width=&quot;1169&quot; data-origin-height=&quot;971&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cAklvG/btsKpvPkOnJ/s429jG4gEyhn6XSDrIBKAK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cAklvG/btsKpvPkOnJ/s429jG4gEyhn6XSDrIBKAK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cAklvG/btsKpvPkOnJ/s429jG4gEyhn6XSDrIBKAK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcAklvG%2FbtsKpvPkOnJ%2Fs429jG4gEyhn6XSDrIBKAK%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;1169&quot; height=&quot;971&quot; data-filename=&quot;스크린샷 2024-10-31 오전 2.02.16.png&quot; data-origin-width=&quot;1169&quot; data-origin-height=&quot;971&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Pending인 파드의 수를 세보니 10개로 확인됩니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2024-10-31 오전 2.04.49.png&quot; data-origin-width=&quot;1169&quot; data-origin-height=&quot;971&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/KS13s/btsKrc8yIkI/kzZuPerYYYUSzJKtM30i50/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/KS13s/btsKrc8yIkI/kzZuPerYYYUSzJKtM30i50/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/KS13s/btsKrc8yIkI/kzZuPerYYYUSzJKtM30i50/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FKS13s%2FbtsKrc8yIkI%2FkzZuPerYYYUSzJKtM30i50%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;1169&quot; height=&quot;971&quot; data-filename=&quot;스크린샷 2024-10-31 오전 2.04.49.png&quot; data-origin-width=&quot;1169&quot; data-origin-height=&quot;971&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;t3.medium 노드 3대에는 각각 17개의 파드가 생성되어 있는 것을 알 수 있습니다. 이 수를 넘어서는 파드를 생성할 수 없기 때문에 현재 모드에서 노드당 지원하는 파드 수를 알아두어야 합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이를 해결하기 위한 방법으로 IPv4 Prefix Delegation을 활용할 수 있습니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;937&quot; data-origin-height=&quot;780&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/DVBZ8/btsKpCHJkvU/kRyYWlmYgRvhiK7vyDlKak/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/DVBZ8/btsKpCHJkvU/kRyYWlmYgRvhiK7vyDlKak/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/DVBZ8/btsKpCHJkvU/kRyYWlmYgRvhiK7vyDlKak/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FDVBZ8%2FbtsKpCHJkvU%2FkRyYWlmYgRvhiK7vyDlKak%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;937&quot; height=&quot;780&quot; data-origin-width=&quot;937&quot; data-origin-height=&quot;780&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;접두사 모드를 활용하면 ENI당 16개의 IPv4를 활용할 수 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://www.eksworkshop.com/docs/networking/vpc-cni/prefix/&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://www.eksworkshop.com/docs/networking/vpc-cni/prefix/&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1730308352503&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;Prefix Delegation | EKS Workshop&quot; data-og-description=&quot;Increase pod density on Amazon Elastic Kubernetes Service with prefix delegation.&quot; data-og-host=&quot;www.eksworkshop.com&quot; data-og-source-url=&quot;https://www.eksworkshop.com/docs/networking/vpc-cni/prefix/&quot; data-og-url=&quot;https://www.eksworkshop.com/docs/networking/vpc-cni/prefix/&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/BCgjN/hyXpqf8J35/YUhNAKL7VCDsGOoQnwFCtk/img.jpg?width=1200&amp;amp;height=628&amp;amp;face=0_0_1200_628,https://scrap.kakaocdn.net/dn/oCjws/hyXpoWUVCk/8nBiN5r7rtALy26K9qSk2k/img.jpg?width=1200&amp;amp;height=628&amp;amp;face=0_0_1200_628&quot;&gt;&lt;a href=&quot;https://www.eksworkshop.com/docs/networking/vpc-cni/prefix/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://www.eksworkshop.com/docs/networking/vpc-cni/prefix/&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/BCgjN/hyXpqf8J35/YUhNAKL7VCDsGOoQnwFCtk/img.jpg?width=1200&amp;amp;height=628&amp;amp;face=0_0_1200_628,https://scrap.kakaocdn.net/dn/oCjws/hyXpoWUVCk/8nBiN5r7rtALy26K9qSk2k/img.jpg?width=1200&amp;amp;height=628&amp;amp;face=0_0_1200_628');&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;Prefix Delegation | EKS Workshop&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;Increase pod density on Amazon Elastic Kubernetes Service with prefix delegation.&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;www.eksworkshop.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;h3 data-ke-size=&quot;size23&quot;&gt;Service, loadbalancer controller&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;k8s의 서비스는&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;ClusterIP&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1111&quot; data-origin-height=&quot;382&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/SzfEl/btsKtJs5z1n/SavNRXomM1aIU9qIOnPljk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/SzfEl/btsKtJs5z1n/SavNRXomM1aIU9qIOnPljk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/SzfEl/btsKtJs5z1n/SavNRXomM1aIU9qIOnPljk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FSzfEl%2FbtsKtJs5z1n%2FSavNRXomM1aIU9qIOnPljk%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;1111&quot; height=&quot;382&quot; data-origin-width=&quot;1111&quot; data-origin-height=&quot;382&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;NodePort&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;972&quot; data-origin-height=&quot;375&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/b8oo5L/btsKtUgJcmH/BGvWEJww5Zzrn6fVZ0MVk1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/b8oo5L/btsKtUgJcmH/BGvWEJww5Zzrn6fVZ0MVk1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/b8oo5L/btsKtUgJcmH/BGvWEJww5Zzrn6fVZ0MVk1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fb8oo5L%2FbtsKtUgJcmH%2FBGvWEJww5Zzrn6fVZ0MVk1%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;972&quot; height=&quot;375&quot; data-origin-width=&quot;972&quot; data-origin-height=&quot;375&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;LoadBalancer (NLB 인스턴스 유형)&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1157&quot; data-origin-height=&quot;362&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bEv06o/btsKt9kuO26/r84qtsFAxSZDV0s1DAj330/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bEv06o/btsKt9kuO26/r84qtsFAxSZDV0s1DAj330/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bEv06o/btsKt9kuO26/r84qtsFAxSZDV0s1DAj330/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbEv06o%2FbtsKt9kuO26%2Fr84qtsFAxSZDV0s1DAj330%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;1157&quot; height=&quot;362&quot; data-origin-width=&quot;1157&quot; data-origin-height=&quot;362&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;LoadBalancer (NLB IP모드 동작 with AWS VPC CNI)&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1146&quot; data-origin-height=&quot;429&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/Z6xvS/btsKvbhjEIQ/oYWnjCee1ZYUjpyCZurcA0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/Z6xvS/btsKvbhjEIQ/oYWnjCee1ZYUjpyCZurcA0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/Z6xvS/btsKvbhjEIQ/oYWnjCee1ZYUjpyCZurcA0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FZ6xvS%2FbtsKvbhjEIQ%2FoYWnjCee1ZYUjpyCZurcA0%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;1146&quot; height=&quot;429&quot; data-origin-width=&quot;1146&quot; data-origin-height=&quot;429&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;가 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;ClusterIP 는 파드의 요청을 Control Plane의 iptables의 rule를 통해 각 node의 pod로 전달해줍니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;NodePort 는 각요청을 Data Plane의 노드 내에 있는 iptables의 rule을 통해 대상 pod로 전달해줍니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Loadblancer는 별개의 로드밸런서 리소스가 요청을 각 노드의 iptables로 전달, iptables rule에 의해 대상 pod 로 요청을 전달합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이때 AWS VPC CNI 구성에서 NLB&amp;nbsp; IP모드에서는 로드밸런서가 각각의 파드 ip를 알고 파드로 요청을 바로 전달하는 유형입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;Ingress&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;인그레스는 클러스터 내부의 서비스 (ClusterIP, NodePort, LoadBalancer)를 외부로 노출하는 proxy 역할을 제공해주는 리소스입니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1136&quot; data-origin-height=&quot;411&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/xAxKB/btsKuaqbA9R/t6PPwKQ1YlKm0LNFdN7430/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/xAxKB/btsKuaqbA9R/t6PPwKQ1YlKm0LNFdN7430/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/xAxKB/btsKuaqbA9R/t6PPwKQ1YlKm0LNFdN7430/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FxAxKB%2FbtsKuaqbA9R%2Ft6PPwKQ1YlKm0LNFdN7430%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;1136&quot; height=&quot;411&quot; data-origin-width=&quot;1136&quot; data-origin-height=&quot;411&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&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;h3 data-ke-size=&quot;size23&quot;&gt;ExternalDNS&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;서비스나 인그레스 생성시에 설정된 도메인 (AWS Route53과 같은)에 레코드를 자동으로 생성/삭제 해주는 리소스입니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1375&quot; data-origin-height=&quot;756&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/b16ln6/btsKtBPyBtf/fE7sTKwcOeh5HiqVBAR8P1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/b16ln6/btsKtBPyBtf/fE7sTKwcOeh5HiqVBAR8P1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/b16ln6/btsKtBPyBtf/fE7sTKwcOeh5HiqVBAR8P1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fb16ln6%2FbtsKtBPyBtf%2FfE7sTKwcOeh5HiqVBAR8P1%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;1375&quot; height=&quot;756&quot; data-origin-width=&quot;1375&quot; data-origin-height=&quot;756&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이를 활용하기 위해서는&lt;span style=&quot;color: #ee2323;&quot;&gt; route53에 public domain을 소유&lt;/span&gt;하고 있어야 합니다. 또한 ExternalDNS 리소스가 직접 route53에 접근해야하므로, IRSA 혹은 pod-identity와 같은 자격증명을 필요로합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>스터디</category>
      <author>엔지니어-여리</author>
      <guid isPermaLink="true">https://yeoli-tech.tistory.com/52</guid>
      <comments>https://yeoli-tech.tistory.com/52#entry52comment</comments>
      <pubDate>Thu, 31 Oct 2024 02:12:41 +0900</pubDate>
    </item>
    <item>
      <title>[KANS 3기] 8주차 Cilium CNI</title>
      <link>https://yeoli-tech.tistory.com/51</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;이번 주는 Cilium CNI에 대해서 공부한 내용을 정리해보고자 합니다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;실습 환경 구성&lt;/h2&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;h3 data-ke-size=&quot;size23&quot;&gt;배포&amp;nbsp;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;실습환경 구성은 이전에 한 방법과 같이 cloudformation template를 배포합니다.&lt;/p&gt;
&lt;pre id=&quot;code_1729895450186&quot; class=&quot;awk&quot; style=&quot;background-color: #f8f8f8; color: #383a42; text-align: start;&quot; data-ke-type=&quot;codeblock&quot; data-ke-language=&quot;bash&quot;&gt;&lt;code&gt;#cloudformation template url
https://s3.ap-northeast-2.amazonaws.com/cloudformation.cloudneta.net/kans/kans-8w.yaml&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2024-10-26 오전 7.28.08.png&quot; data-origin-width=&quot;1451&quot; data-origin-height=&quot;1314&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/ckCwMx/btsKj03qf9t/1qIpLeGYhL3f2yGhLhrlu0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/ckCwMx/btsKj03qf9t/1qIpLeGYhL3f2yGhLhrlu0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/ckCwMx/btsKj03qf9t/1qIpLeGYhL3f2yGhLhrlu0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FckCwMx%2FbtsKj03qf9t%2F1qIpLeGYhL3f2yGhLhrlu0%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;1451&quot; height=&quot;1314&quot; data-filename=&quot;스크린샷 2024-10-26 오전 7.28.08.png&quot; data-origin-width=&quot;1451&quot; data-origin-height=&quot;1314&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2024-10-26 오전 7.29.01.png&quot; data-origin-width=&quot;1451&quot; data-origin-height=&quot;1314&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/beVTCz/btsKjNbXfJd/a8XGlueO0X5od3P1BKNjX0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/beVTCz/btsKjNbXfJd/a8XGlueO0X5od3P1BKNjX0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/beVTCz/btsKjNbXfJd/a8XGlueO0X5od3P1BKNjX0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbeVTCz%2FbtsKjNbXfJd%2Fa8XGlueO0X5od3P1BKNjX0%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;1451&quot; height=&quot;1314&quot; data-filename=&quot;스크린샷 2024-10-26 오전 7.29.01.png&quot; data-origin-width=&quot;1451&quot; data-origin-height=&quot;1314&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;clouformation template은 3분이내에 배포가 완료되지만, 생성된 ec2의 userdata가 모두 구성되는데 시간이 소요될 수 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;배포 후 5~7분 정도 지난 후 접속해보시는 걸 권장드립니다.&lt;/p&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;h3 data-ke-size=&quot;size23&quot;&gt;배포확인&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;배포가 완료되었는지 확인을 위해 ssh 접속한 뒤, 환경을 확인해보겠습니다.&lt;/p&gt;
&lt;pre id=&quot;code_1729920025338&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;클러스터 기본 정보 확인
kubectl cluster-info

# 노드 상태 확인
kc get node -owide

# 모든 파드 정보를 확인합니다.
kc get pod -A

hostnamectl

# cilium이 제대로 동작하기 위해서는 커널 버전을 5.8 이상으로 설정해야합니다.
uname -a&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2024-10-26 오후 2.18.44.png&quot; data-origin-width=&quot;1007&quot; data-origin-height=&quot;705&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/DWniu/btsKjLkXOLc/Ak5NHos2H2eMgLhFdXuFd1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/DWniu/btsKjLkXOLc/Ak5NHos2H2eMgLhFdXuFd1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/DWniu/btsKjLkXOLc/Ak5NHos2H2eMgLhFdXuFd1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FDWniu%2FbtsKjLkXOLc%2FAk5NHos2H2eMgLhFdXuFd1%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;1007&quot; height=&quot;705&quot; data-filename=&quot;스크린샷 2024-10-26 오후 2.18.44.png&quot; data-origin-width=&quot;1007&quot; data-origin-height=&quot;705&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;간단한 명령어로 클러스터 상태를 확인할 수 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;Cilium 소개&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- cilium은 eBPF 기반으로 Pod Network 환경 + 보안을 제공하는 CNI plugin 입니다.&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;- 추가적인 App이나 설정 변경 없이 리눅스 커널을 자유롭게 프로그래밍하여 동작합니다.&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;- 모든 패킷을 가로채기 위해 수신 NIC의 Ingress TC Hook을 사용합니다.&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;- 네트워크 모드는 2가지 지원합니다. 터널모드 (VXLAN, GENEVE), 네이티브 라우팅 모드&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;- kube-proxy 가 없습니다.&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;BPF, eBPF&amp;nbsp;&lt;/h3&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;481&quot; data-origin-height=&quot;612&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bt9gry/btsKlw7Dzl7/GnjrKvUwmflUHIfYngCbPK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bt9gry/btsKlw7Dzl7/GnjrKvUwmflUHIfYngCbPK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bt9gry/btsKlw7Dzl7/GnjrKvUwmflUHIfYngCbPK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbt9gry%2FbtsKlw7Dzl7%2FGnjrKvUwmflUHIfYngCbPK%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;481&quot; height=&quot;612&quot; data-origin-width=&quot;481&quot; data-origin-height=&quot;612&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;전통적인 리눅스 네트워크 스택에서는 netfilter / iptables를 기반으로 동작합니다. iptables를 활용한 방식은 쿠버네티스 클러스터가 동작하는 동안 패킷을 처리하는 데 레이어를 건너뛰기 어렵습니다. (규칙이 일치될 때까지 모든 규칙을 평가합니다.) 이를 해결하기 위해 BPF, eBPF가 등장하였습니다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;eBPF의 동작은 아래 그림과 같습니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1021&quot; data-origin-height=&quot;1777&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bLRHTW/btsKlxldsKS/xmlFo7ODndj2NqsezgG7qk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bLRHTW/btsKlxldsKS/xmlFo7ODndj2NqsezgG7qk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bLRHTW/btsKlxldsKS/xmlFo7ODndj2NqsezgG7qk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbLRHTW%2FbtsKlxldsKS%2FxmlFo7ODndj2NqsezgG7qk%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;1021&quot; height=&quot;1777&quot; data-origin-width=&quot;1021&quot; data-origin-height=&quot;1777&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;기존의 iptables에서 패킷필터를 처리하는 게 아닌 eBPF는 &lt;b&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;커널 샌드박스&lt;/span&gt;&lt;/b&gt;에서 구성된 dynamic programming에 의해 필터링 되어 더 나은 성능을 제공할 수 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;eBPF에서 제공하는 기능은 대표적으로 4가지 입니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1086&quot; data-origin-height=&quot;262&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/XuOZB/btsKj0vHpez/BLKor91pKHIxMAMY0o2oB1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/XuOZB/btsKj0vHpez/BLKor91pKHIxMAMY0o2oB1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/XuOZB/btsKj0vHpez/BLKor91pKHIxMAMY0o2oB1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FXuOZB%2FbtsKj0vHpez%2FBLKor91pKHIxMAMY0o2oB1%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;1086&quot; height=&quot;262&quot; data-origin-width=&quot;1086&quot; data-origin-height=&quot;262&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;성능 비교&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;영역에 따른 패킷 차단 성능 (10GB)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;네트워크 구조&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;989&quot; data-origin-height=&quot;438&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/qYG3M/btsKl52NjtP/K7KHNmjOWr0Q1ZemkW1l50/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/qYG3M/btsKl52NjtP/K7KHNmjOWr0Q1ZemkW1l50/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/qYG3M/btsKl52NjtP/K7KHNmjOWr0Q1ZemkW1l50/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FqYG3M%2FbtsKl52NjtP%2FK7KHNmjOWr0Q1ZemkW1l50%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;989&quot; height=&quot;438&quot; data-origin-width=&quot;989&quot; data-origin-height=&quot;438&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;성능 표&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;964&quot; data-origin-height=&quot;550&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/8z48l/btsKkIuh9PJ/WKBaK34JIazkiV692XuWbk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/8z48l/btsKkIuh9PJ/WKBaK34JIazkiV692XuWbk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/8z48l/btsKkIuh9PJ/WKBaK34JIazkiV692XuWbk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F8z48l%2FbtsKkIuh9PJ%2FWKBaK34JIazkiV692XuWbk%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;964&quot; height=&quot;550&quot; data-origin-width=&quot;964&quot; data-origin-height=&quot;550&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Userspace: Device Driver - Ingress - Proto Handler - Routing - Input - Upper Layer (L4 ~)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Netfilter : &lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;Device Driver - Ingress - Proto Handler - Routing - Input&lt;span&gt; (L4)&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;TC : &lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;Device Driver - Ingress (L3)&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;XDP: Device Driver (L2)&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;Architecture&amp;nbsp;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;2048&quot; data-origin-height=&quot;1664&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/df2Shi/btsKliPomnY/NhMa9JJz7iszz7RuZtU5dk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/df2Shi/btsKliPomnY/NhMa9JJz7iszz7RuZtU5dk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/df2Shi/btsKliPomnY/NhMa9JJz7iszz7RuZtU5dk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fdf2Shi%2FbtsKliPomnY%2FNhMa9JJz7iszz7RuZtU5dk%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;2048&quot; height=&quot;1664&quot; data-origin-width=&quot;2048&quot; data-origin-height=&quot;1664&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;cilium architecture에 대한 자세한 설명은 &lt;a href=&quot;https://www.youtube.com/watch?v=LCQ89uBB7zE&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://www.youtube.com/watch?v=LCQ89uBB7zE&lt;/a&gt; 링크에 자세한 설명이 포함되어 있습니다.&lt;/p&gt;
&lt;figure data-ke-type=&quot;video&quot; data-ke-style=&quot;alignCenter&quot; data-video-host=&quot;youtube&quot; data-video-url=&quot;https://www.youtube.com/watch?v=LCQ89uBB7zE&quot; data-video-thumbnail=&quot;https://scrap.kakaocdn.net/dn/baNHxV/hyXptbCbJv/KgmIBj0d2tyViUfekKXD3k/img.jpg?width=1280&amp;amp;height=720&amp;amp;face=90_350_1180_540,https://scrap.kakaocdn.net/dn/1uvUH/hyXlRFc0Ed/02pWACudIXq0aZhgU7p4W0/img.jpg?width=1280&amp;amp;height=720&amp;amp;face=90_350_1180_540&quot; data-video-width=&quot;860&quot; data-video-height=&quot;484&quot; data-video-origin-width=&quot;860&quot; data-video-origin-height=&quot;484&quot; data-ke-mobilestyle=&quot;widthContent&quot; data-video-title=&quot;An Overview of the Cilium Architecture&quot; data-original-url=&quot;&quot;&gt;&lt;iframe src=&quot;https://www.youtube.com/embed/LCQ89uBB7zE&quot; width=&quot;860&quot; height=&quot;484&quot; frameborder=&quot;&quot; allowfullscreen=&quot;true&quot;&gt;&lt;/iframe&gt;
&lt;figcaption style=&quot;display: none;&quot;&gt;&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그밖에 cilium&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;Cilium &lt;b&gt;Agent&lt;/b&gt; : 데몬셋으로 실행, K8S API 설정으로 부터 '네트워크 설정, 네트워크 정책, 서비스 부하분산, 모니터링' 등을 수행하며, eBPF 프로그램을 관리한다.&lt;/li&gt;
&lt;li&gt;Cilium &lt;b&gt;Operator&lt;/b&gt; : K8S 클러스터에 대한 한 번씩 처리해야 하는 작업을 관리.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Hubble&lt;/b&gt; : 네트워크와 보안 모니터링 플랫폼 역할을 하여, 'Server, Relay, Client, Graphical UI' 로 구성되어 있다.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Data Store&lt;/b&gt; : Cilium Agent 간의 상태를 저장하고 전파하는 데이터 저장소, 2가지 종류 중 선택(K8S CRDs, Key-Value Store)&lt;/li&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;또한 cilium 커맨드라인 도구로 cilium-cli가 있습니다.&amp;nbsp;&amp;nbsp;&lt;/p&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 data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;배포&amp;nbsp;&lt;/h3&gt;
&lt;pre id=&quot;code_1729926235940&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;# cilium helm repo 추가
helm repo add cilium https://helm.cilium.io/
helm repo update

# cilium helm chart 설치
helm install cilium cilium/cilium --version 1.16.3 --namespace kube-system \
--set k8sServiceHost=192.168.10.10 --set k8sServicePort=6443 --set debug.enabled=true \
--set rollOutCiliumPods=true --set routingMode=native --set autoDirectNodeRoutes=true \
--set bpf.masquerade=true --set bpf.hostRouting=true --set endpointRoutes.enabled=true \
--set ipam.mode=kubernetes --set k8s.requireIPv4PodCIDR=true --set kubeProxyReplacement=true \
--set ipv4NativeRoutingCIDR=192.168.0.0/16 --set installNoConntrackIptablesRules=true \
--set hubble.ui.enabled=true --set hubble.relay.enabled=true --set prometheus.enabled=true --set operator.prometheus.enabled=true --set hubble.metrics.enableOpenMetrics=true \
--set hubble.metrics.enabled=&quot;{dns:query;ignoreAAAA,drop,tcp,flow,port-distribution,icmp,httpV2:exemplars=true;labelsContext=source_ip\,source_namespace\,source_workload\,destination_ip\,destination_namespace\,destination_workload\,traffic_direction}&quot; \
--set operator.replicas=1

# 변수 설명
--set debug.enabled=true # cilium 파드에 로그 레벨을 debug 설정
--set autoDirectNodeRoutes=true # 동일 대역 내의 노드들 끼리는 상대 노드의 podCIDR 대역의 라우팅이 자동으로 설정
--set endpointRoutes.enabled=true # 호스트에 endpoint(파드)별 개별 라우팅 설정
--set hubble.relay.enabled=true --set hubble.ui.enabled=true # hubble 활성화
--set ipam.mode=kubernetes --set k8s.requireIPv4PodCIDR=true # k8s IPAM 활용
--set kubeProxyReplacement=true # kube-proxy 없이 (최대한) 대처할수 있수 있게
--set ipv4NativeRoutingCIDR=192.168.0.0/16 # 해당 대역과 통신 시 IP Masq 하지 않음, 보통 사내망 대역을 지정
--set operator.replicas=1 # cilium-operator 파드 기본 1개
--set enableIPv4Masquerade=true --set bpf.masquerade=true # 파드를 위한 Masquerade , 추가로 Masquerade 을 BPF 로 처리 &amp;gt;&amp;gt; enableIPv4Masquerade=true 인 상태에서 추가로 bpf.masquerade=true 적용이 가능&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;실제 환경에 적용하면 다음 영상과 같이 cilium을 helm chart로 설치하고 파드가 생성되는 것을 확인할 수 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;figure data-ke-type=&quot;video&quot; data-ke-style=&quot;alignCenter&quot; data-video-host=&quot;kakaotv&quot; data-video-url=&quot;https://tv.kakao.com/v/450469071&quot; data-video-thumbnail=&quot;https://scrap.kakaocdn.net/dn/bUqajO/hyXpwe6MZM/X3wjR3FMz5EO7AlxvUvJBK/img.jpg?width=882&amp;amp;height=594&amp;amp;face=0_0_882_594,https://scrap.kakaocdn.net/dn/bmPmpZ/hyXlSxmJ4Z/ZsCAyy0wO7Kqi82uaaKxkk/img.jpg?width=882&amp;amp;height=594&amp;amp;face=0_0_882_594&quot; data-video-width=&quot;860&quot; data-video-height=&quot;579&quot; data-video-origin-width=&quot;860&quot; data-video-origin-height=&quot;579&quot; data-ke-mobilestyle=&quot;widthContent&quot; data-video-play-service=&quot;daum_tistory&quot; data-original-url=&quot;&quot; data-video-title=&quot;&quot;&gt;&lt;iframe src=&quot;https://play-tv.kakao.com/embed/player/cliplink/450469071?service=daum_tistory&quot; width=&quot;860&quot; height=&quot;579&quot; frameborder=&quot;0&quot; allowfullscreen=&quot;true&quot;&gt;&lt;/iframe&gt;
&lt;figcaption style=&quot;display: none;&quot;&gt;&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;cilium을 설치하게 되면 이전에 pending 상태였던 파드들이 배포되는 것을 알 수 있습니다. 이는 cilium이 kube-proxy를 사용하지 않으므로 처음에 배포했던 cloudformation template에서는 kube-proxy를 제외하고 설치하였기 때문에 kube-proxy가 없어 pod가 배포되지 않았었고, kube-proxy를 대체할 수 있는 cilium CNI가 구성되어 생성 대기중이던 pod가 배포되기 시작하였기 때문입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;cilium 설치시 생성되는 파드중 cilium envoy는&lt;span style=&quot;background-color: #ffffff; color: #242b34; text-align: start;&quot;&gt; 최소한의 Envoy 확장 및 사용자 지정 정책 적용 필터로 구축됩니다. Cilium은 이 최소한의 배포를 클러스터의 네트워크 정책에 지정된 대로 HTTP 및 기타 L7 정책을 적용하기 위한 호스트 프록시로 사용합니다. 실리움 프록시는 실리움 이미지 내에 배포됩니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #242b34; text-align: start;&quot;&gt;다른 cni와 다르게 cilium을 구성하면 iptables가 한 눈에 보일정도로 짧아지는 것을 확인할 수 있습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2024-10-26 오후 6.06.56.png&quot; data-origin-width=&quot;1252&quot; data-origin-height=&quot;880&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/yBSlz/btsKmmccioO/OakLDOf1jNz2iJlREuxVP0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/yBSlz/btsKmmccioO/OakLDOf1jNz2iJlREuxVP0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/yBSlz/btsKmmccioO/OakLDOf1jNz2iJlREuxVP0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FyBSlz%2FbtsKmmccioO%2FOakLDOf1jNz2iJlREuxVP0%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;880&quot; data-filename=&quot;스크린샷 2024-10-26 오후 6.06.56.png&quot; data-origin-width=&quot;1252&quot; data-origin-height=&quot;880&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;CLI 설치&lt;/h3&gt;
&lt;pre id=&quot;code_1729933775008&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;# Cilium CLI 설치
CILIUM_CLI_VERSION=$(curl -s https://raw.githubusercontent.com/cilium/cilium-cli/main/stable.txt)
CLI_ARCH=amd64
if [ &quot;$(uname -m)&quot; = &quot;aarch64&quot; ]; then CLI_ARCH=arm64; fi
curl -L --fail --remote-name-all https://github.com/cilium/cilium-cli/releases/download/${CILIUM_CLI_VERSION}/cilium-linux-${CLI_ARCH}.tar.gz{,.sha256sum}
sha256sum --check cilium-linux-${CLI_ARCH}.tar.gz.sha256sum
sudo tar xzvfC cilium-linux-${CLI_ARCH}.tar.gz /usr/local/bin
rm cilium-linux-${CLI_ARCH}.tar.gz{,.sha256sum}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2024-10-26 오후 6.08.59.png&quot; data-origin-width=&quot;1022&quot; data-origin-height=&quot;705&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/tfiBI/btsKlzDqMip/KOxIuFhYacLHt0FycDL3x0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/tfiBI/btsKlzDqMip/KOxIuFhYacLHt0FycDL3x0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/tfiBI/btsKlzDqMip/KOxIuFhYacLHt0FycDL3x0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FtfiBI%2FbtsKlzDqMip%2FKOxIuFhYacLHt0FycDL3x0%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;1022&quot; height=&quot;705&quot; data-filename=&quot;스크린샷 2024-10-26 오후 6.08.59.png&quot; data-origin-width=&quot;1022&quot; data-origin-height=&quot;705&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;간단한 명령어로 cilium cli를 설치할 수 있습니다. 이때 architecture를 잘 설정하여 설치하시기 바랍니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;cilium이 어떻게 설치되어있는지 한 눈에 볼 수 있으니 파악이 쉽습니다.&lt;/p&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 data-ke-size=&quot;size16&quot;&gt;설치 정보 확인&lt;/p&gt;
&lt;pre id=&quot;code_1729933797336&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;# 확인
cilium status --wait
cilium config view&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2024-10-26 오후 6.09.23.png&quot; data-origin-width=&quot;1022&quot; data-origin-height=&quot;1517&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bc8877/btsKlzQTxDr/DlTmjcpgFuoi2j67BUb7jK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bc8877/btsKlzQTxDr/DlTmjcpgFuoi2j67BUb7jK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bc8877/btsKlzQTxDr/DlTmjcpgFuoi2j67BUb7jK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbc8877%2FbtsKlzQTxDr%2FDlTmjcpgFuoi2j67BUb7jK%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;1022&quot; height=&quot;1517&quot; data-filename=&quot;스크린샷 2024-10-26 오후 6.09.23.png&quot; data-origin-width=&quot;1022&quot; data-origin-height=&quot;1517&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;명령어 한 줄로 cilium 설정 정보 확인을 할 수 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1729934003828&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;export CILIUMPOD0=$(kubectl get -l k8s-app=cilium pods -n kube-system --field-selector spec.nodeName=k8s-s  -o jsonpath='{.items[0].metadata.name}')
alias c0=&quot;kubectl exec -it $CILIUMPOD0 -n kube-system -c cilium-agent -- cilium&quot;
c0 status --verbose&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;데몬셋 파드 내에서 cilium cli 명령어로 설정을 확인할 수 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2024-10-26 오후 6.12.36.png&quot; data-origin-width=&quot;1022&quot; data-origin-height=&quot;845&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cULtuI/btsKlXcI94S/tW5Y89HYk4g07P5ngiQxoK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cULtuI/btsKlXcI94S/tW5Y89HYk4g07P5ngiQxoK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cULtuI/btsKlXcI94S/tW5Y89HYk4g07P5ngiQxoK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcULtuI%2FbtsKlXcI94S%2FtW5Y89HYk4g07P5ngiQxoK%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;1022&quot; height=&quot;845&quot; data-filename=&quot;스크린샷 2024-10-26 오후 6.12.36.png&quot; data-origin-width=&quot;1022&quot; data-origin-height=&quot;845&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;kubeProxyReplacement 즉 kube-proxy 없이 동작을 대처한다는 옵션이 잘 설정되어 있음을 확인할 수 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2024-10-26 오후 6.11.36.png&quot; data-origin-width=&quot;1022&quot; data-origin-height=&quot;845&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cFEor6/btsKluhJErk/4F0KDy18QuKFSmcCT0VgNK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cFEor6/btsKluhJErk/4F0KDy18QuKFSmcCT0VgNK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cFEor6/btsKluhJErk/4F0KDy18QuKFSmcCT0VgNK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcFEor6%2FbtsKluhJErk%2F4F0KDy18QuKFSmcCT0VgNK%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;1022&quot; height=&quot;845&quot; data-filename=&quot;스크린샷 2024-10-26 오후 6.11.36.png&quot; data-origin-width=&quot;1022&quot; data-origin-height=&quot;845&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;아래에는 관련 설정 값들을 확인할 수 있습니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2024-10-26 오후 6.11.59.png&quot; data-origin-width=&quot;1022&quot; data-origin-height=&quot;845&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/lHVnN/btsKluIOF5X/RbYzR4efBHLnDaE2bFkduK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/lHVnN/btsKluIOF5X/RbYzR4efBHLnDaE2bFkduK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/lHVnN/btsKluIOF5X/RbYzR4efBHLnDaE2bFkduK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FlHVnN%2FbtsKluIOF5X%2FRbYzR4efBHLnDaE2bFkduK%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;1022&quot; height=&quot;845&quot; data-filename=&quot;스크린샷 2024-10-26 오후 6.11.59.png&quot; data-origin-width=&quot;1022&quot; data-origin-height=&quot;845&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;IPAM이 설정되어 각 노드별로 등록되어있음을 확인할 수 있습니다.&lt;/p&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&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2024-10-26 오후 6.12.13.png&quot; data-origin-width=&quot;1022&quot; data-origin-height=&quot;845&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/b7oUgW/btsKk9d529E/KS7BKEKV5iXI5I2VRMMYXk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/b7oUgW/btsKk9d529E/KS7BKEKV5iXI5I2VRMMYXk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/b7oUgW/btsKk9d529E/KS7BKEKV5iXI5I2VRMMYXk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fb7oUgW%2FbtsKk9d529E%2FKS7BKEKV5iXI5I2VRMMYXk%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;1022&quot; height=&quot;845&quot; data-filename=&quot;스크린샷 2024-10-26 오후 6.12.13.png&quot; data-origin-width=&quot;1022&quot; data-origin-height=&quot;845&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;BPF 맵의 사이즈를 확인할 수 있습니다.&lt;/p&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 data-ke-size=&quot;size16&quot;&gt;agent 기반의 ip masquerading을 켜기 위해 아래 명령어를 실행해줍니다.&lt;/p&gt;
&lt;pre id=&quot;code_1729935748095&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;helm upgrade cilium cilium/cilium --namespace kube-system --reuse-values --set ipMasqAgent.enabled=true&lt;/code&gt;&lt;/pre&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&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2024-10-26 오후 6.42.49.png&quot; data-origin-width=&quot;1022&quot; data-origin-height=&quot;845&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cTMnCd/btsKk9L0RPO/v88VvtbvyxkJRvqBjpA7S0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cTMnCd/btsKk9L0RPO/v88VvtbvyxkJRvqBjpA7S0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cTMnCd/btsKk9L0RPO/v88VvtbvyxkJRvqBjpA7S0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcTMnCd%2FbtsKk9L0RPO%2Fv88VvtbvyxkJRvqBjpA7S0%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;1022&quot; height=&quot;845&quot; data-filename=&quot;스크린샷 2024-10-26 오후 6.42.49.png&quot; data-origin-width=&quot;1022&quot; data-origin-height=&quot;845&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이렇게 cilium 설정이 변경되면 자동으로 cilium 파드가 재생성되는 것을 확인할 수 있습니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2024-10-26 오후 6.43.18.png&quot; data-origin-width=&quot;1022&quot; data-origin-height=&quot;845&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/kMON1/btsKlHHU7lH/34YwijbuL12CQQkT9GQ9G1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/kMON1/btsKlHHU7lH/34YwijbuL12CQQkT9GQ9G1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/kMON1/btsKlHHU7lH/34YwijbuL12CQQkT9GQ9G1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FkMON1%2FbtsKlHHU7lH%2F34YwijbuL12CQQkT9GQ9G1%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;1022&quot; height=&quot;845&quot; data-filename=&quot;스크린샷 2024-10-26 오후 6.43.18.png&quot; data-origin-width=&quot;1022&quot; data-origin-height=&quot;845&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1729935875427&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;export CILIUMPOD0=$(kubectl get -l k8s-app=cilium pods -n kube-system --field-selector spec.nodeName=k8s-s  -o jsonpath='{.items[0].metadata.name}')
alias c0=&quot;kubectl exec -it $CILIUMPOD0 -n kube-system -c cilium-agent -- cilium&quot;
c0 status --verbose | grep Masquerading&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;설정을 확인하기 위해 다시 명령어를 입력해보면 다음과 같은 내용을 확인할 수 있습니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2024-10-26 오후 6.44.17.png&quot; data-origin-width=&quot;1022&quot; data-origin-height=&quot;845&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dM9nyD/btsKkibGDt9/aiOCScD49h1dESPhxMqe40/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dM9nyD/btsKkibGDt9/aiOCScD49h1dESPhxMqe40/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dM9nyD/btsKkibGDt9/aiOCScD49h1dESPhxMqe40/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdM9nyD%2FbtsKkibGDt9%2FaiOCScD49h1dESPhxMqe40%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;1022&quot; height=&quot;845&quot; data-filename=&quot;스크린샷 2024-10-26 오후 6.44.17.png&quot; data-origin-width=&quot;1022&quot; data-origin-height=&quot;845&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;변수 및 약어 설정&lt;/h3&gt;
&lt;pre id=&quot;code_1729935932060&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;# cilium 파드 이름
export CILIUMPOD0=$(kubectl get -l k8s-app=cilium pods -n kube-system --field-selector spec.nodeName=k8s-s  -o jsonpath='{.items[0].metadata.name}')
export CILIUMPOD1=$(kubectl get -l k8s-app=cilium pods -n kube-system --field-selector spec.nodeName=k8s-w1 -o jsonpath='{.items[0].metadata.name}')
export CILIUMPOD2=$(kubectl get -l k8s-app=cilium pods -n kube-system --field-selector spec.nodeName=k8s-w2 -o jsonpath='{.items[0].metadata.name}')

# 단축키(alias) 지정
alias c0=&quot;kubectl exec -it $CILIUMPOD0 -n kube-system -c cilium-agent -- cilium&quot;
alias c1=&quot;kubectl exec -it $CILIUMPOD1 -n kube-system -c cilium-agent -- cilium&quot;
alias c2=&quot;kubectl exec -it $CILIUMPOD2 -n kube-system -c cilium-agent -- cilium&quot;

alias c0bpf=&quot;kubectl exec -it $CILIUMPOD0 -n kube-system -c cilium-agent -- bpftool&quot;
alias c1bpf=&quot;kubectl exec -it $CILIUMPOD1 -n kube-system -c cilium-agent -- bpftool&quot;
alias c2bpf=&quot;kubectl exec -it $CILIUMPOD2 -n kube-system -c cilium-agent -- bpftool&quot;

# Hubble UI 웹 접속
kubectl patch -n kube-system svc hubble-ui -p '{&quot;spec&quot;: {&quot;type&quot;: &quot;NodePort&quot;}}'
HubbleUiNodePort=$(kubectl get svc -n kube-system hubble-ui -o jsonpath={.spec.ports[0].nodePort})
echo -e &quot;Hubble UI URL = http://$(curl -s ipinfo.io/ip):$HubbleUiNodePort&quot;

# 자주 사용 명령
helm upgrade cilium cilium/cilium --namespace kube-system --reuse-values --set
kubetail -n kube-system -l k8s-app=cilium --since 12h
kubetail -n kube-system -l k8s-app=cilium-envoy --since 12h&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;추가로, cilium의 cheat sheet도 공유하겠습니다. 원본 파일은 &lt;a href=&quot;https://isovalent.com/blog/post/cilium-cheat-sheet/&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://isovalent.com/blog/post/cilium-cheat-sheet/&lt;/a&gt;에서 다운로드 받을 수 있습니다.&lt;/p&gt;
&lt;figure id=&quot;og_1729936379168&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;Cilium Cheat Sheet - Master the Cilium CLI to Manage and Configure your Kubernetes Network - Isovalent&quot; data-og-description=&quot;Download the Cilium Cheat Sheet - helping you get to master the Cilium CLI, produced by the creators of Cilium&quot; data-og-host=&quot;isovalent.com&quot; data-og-source-url=&quot;https://isovalent.com/blog/post/cilium-cheat-sheet/&quot; data-og-url=&quot;https://isovalent.com/blog/post/cilium-cheat-sheet/&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/KKpvi/hyXpwzrhKO/dYgc0ZQFww9kHoZAHfd930/img.jpg?width=1200&amp;amp;height=630&amp;amp;face=0_0_1200_630,https://scrap.kakaocdn.net/dn/skh2q/hyXlH3I5n4/RAOX3xNhWFKIIpE1duCRbk/img.jpg?width=1200&amp;amp;height=630&amp;amp;face=0_0_1200_630,https://scrap.kakaocdn.net/dn/fqdDz/hyXpsw12JV/QBxvGBF8LbKWrZ1zy4SK1k/img.png?width=1024&amp;amp;height=626&amp;amp;face=0_0_1024_626&quot;&gt;&lt;a href=&quot;https://isovalent.com/blog/post/cilium-cheat-sheet/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://isovalent.com/blog/post/cilium-cheat-sheet/&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/KKpvi/hyXpwzrhKO/dYgc0ZQFww9kHoZAHfd930/img.jpg?width=1200&amp;amp;height=630&amp;amp;face=0_0_1200_630,https://scrap.kakaocdn.net/dn/skh2q/hyXlH3I5n4/RAOX3xNhWFKIIpE1duCRbk/img.jpg?width=1200&amp;amp;height=630&amp;amp;face=0_0_1200_630,https://scrap.kakaocdn.net/dn/fqdDz/hyXpsw12JV/QBxvGBF8LbKWrZ1zy4SK1k/img.png?width=1024&amp;amp;height=626&amp;amp;face=0_0_1024_626');&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;Cilium Cheat Sheet - Master the Cilium CLI to Manage and Configure your Kubernetes Network - Isovalent&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;Download the Cilium Cheat Sheet - helping you get to master the Cilium CLI, produced by the creators of Cilium&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;isovalent.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;p&gt;&lt;figure class=&quot;fileblock&quot; data-ke-align=&quot;alignCenter&quot;&gt;&lt;a href=&quot;https://blog.kakaocdn.net/dn/dTCE8u/btsKlcn6ctK/rJHb9YpC0jKftTUrYkNJR0/Isovalent%20-%20Cilium%20Cheat%20Sheet.pdf?attach=1&amp;amp;knm=tfile.pdf&quot; class=&quot;&quot;&gt;
    &lt;div class=&quot;image&quot;&gt;&lt;/div&gt;
    &lt;div class=&quot;desc&quot;&gt;&lt;div class=&quot;filename&quot;&gt;&lt;span class=&quot;name&quot;&gt;Isovalent - Cilium Cheat Sheet.pdf&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;size&quot;&gt;12.74MB&lt;/div&gt;
&lt;/div&gt;
  &lt;/a&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;앞서 설정한 단축어를 활용하면 다음과 같은 방식으로 활용할 수 있습니다.&lt;/p&gt;
&lt;pre id=&quot;code_1729936421659&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;# cilium 파드 확인
kubectl get pod -n kube-system -l k8s-app=cilium -owide

# cilium 파드 재시작
kubectl -n kube-system rollout restart ds/cilium
혹은
kubectl delete pod -n kube-system -l k8s-app=cilium

# cilium 설정 정보 확인
cilium config view

# cilium 파드의 cilium 상태 확인
c0 status --verbose

# cilium 엔드포인트 확인
kubectl get ciliumendpoints -A
c0 endpoint list&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2024-10-26 오후 6.54.06.png&quot; data-origin-width=&quot;1022&quot; data-origin-height=&quot;845&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/US7Sr/btsKktYapQG/Mkg0Kp3SNOmJseIyZsj3H1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/US7Sr/btsKktYapQG/Mkg0Kp3SNOmJseIyZsj3H1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/US7Sr/btsKktYapQG/Mkg0Kp3SNOmJseIyZsj3H1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FUS7Sr%2FbtsKktYapQG%2FMkg0Kp3SNOmJseIyZsj3H1%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;1022&quot; height=&quot;845&quot; data-filename=&quot;스크린샷 2024-10-26 오후 6.54.06.png&quot; data-origin-width=&quot;1022&quot; data-origin-height=&quot;845&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2024-10-26 오후 6.54.19.png&quot; data-origin-width=&quot;1022&quot; data-origin-height=&quot;845&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bgF6rY/btsKj3y3Z8e/809fRh9WQhGL3ljPFcEx6k/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bgF6rY/btsKj3y3Z8e/809fRh9WQhGL3ljPFcEx6k/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bgF6rY/btsKj3y3Z8e/809fRh9WQhGL3ljPFcEx6k/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbgF6rY%2FbtsKj3y3Z8e%2F809fRh9WQhGL3ljPFcEx6k%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;1022&quot; height=&quot;845&quot; data-filename=&quot;스크린샷 2024-10-26 오후 6.54.19.png&quot; data-origin-width=&quot;1022&quot; data-origin-height=&quot;845&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;cilium 데몬셋 파드의 cilium 상태 확인&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2024-10-26 오후 6.54.30.png&quot; data-origin-width=&quot;1022&quot; data-origin-height=&quot;845&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cv3zHJ/btsKlj8G1CX/FwrkLyxGuRdZhASqyCnFk1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cv3zHJ/btsKlj8G1CX/FwrkLyxGuRdZhASqyCnFk1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cv3zHJ/btsKlj8G1CX/FwrkLyxGuRdZhASqyCnFk1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fcv3zHJ%2FbtsKlj8G1CX%2FFwrkLyxGuRdZhASqyCnFk1%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;1022&quot; height=&quot;845&quot; data-filename=&quot;스크린샷 2024-10-26 오후 6.54.30.png&quot; data-origin-width=&quot;1022&quot; data-origin-height=&quot;845&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;ip 목록 조회&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2024-10-26 오후 6.54.38.png&quot; data-origin-width=&quot;1022&quot; data-origin-height=&quot;845&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/lGo3h/btsKl52RAJv/1dy5D9fqxUFzbAS16KsFX1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/lGo3h/btsKl52RAJv/1dy5D9fqxUFzbAS16KsFX1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/lGo3h/btsKl52RAJv/1dy5D9fqxUFzbAS16KsFX1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FlGo3h%2FbtsKl52RAJv%2F1dy5D9fqxUFzbAS16KsFX1%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;1022&quot; height=&quot;845&quot; data-filename=&quot;스크린샷 2024-10-26 오후 6.54.38.png&quot; data-origin-width=&quot;1022&quot; data-origin-height=&quot;845&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;c0에 해당하는 파드에 설정된 서비스 목록 등을 확인할 수 있습니다.&lt;/p&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;h3 data-ke-size=&quot;size23&quot;&gt;Hubble UI&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;통신 및 서비스와 네트워킹 인프라의 동작에 대한 심층적인 가시성을 완전히 투명한 방식으로 제공하는 관찰성을 제공하는 도구&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;애플리케이션 코드 수정 등 추가 설정 없이 동작합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;서비스, 파드, id 기반으로 모니터링/제어를 제공합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Hubble relay를 활용하여 전체 클러스터, 클러스터 메시 환경에서 클러스터에 대한 가시성을 제공합니다.&lt;/p&gt;
&lt;pre id=&quot;code_1729936035468&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;kubectl patch -n kube-system svc hubble-ui -p '{&quot;spec&quot;: {&quot;type&quot;: &quot;NodePort&quot;}}'
HubbleUiNodePort=$(kubectl get svc -n kube-system hubble-ui -o jsonpath={.spec.ports[0].nodePort})
echo -e &quot;Hubble UI URL = http://$(curl -s ipinfo.io/ip):$HubbleUiNodePort&quot;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Cilium 구성요소중 Hubble의 UI 접근을 위해 service type을 nodeport로 변경하여 접속합니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2024-10-26 오후 6.47.21.png&quot; data-origin-width=&quot;1022&quot; data-origin-height=&quot;845&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/wsMGf/btsKklsA9vh/qoxPZwHQHFOc4AveLbpWG1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/wsMGf/btsKklsA9vh/qoxPZwHQHFOc4AveLbpWG1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/wsMGf/btsKklsA9vh/qoxPZwHQHFOc4AveLbpWG1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FwsMGf%2FbtsKklsA9vh%2FqoxPZwHQHFOc4AveLbpWG1%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;1022&quot; height=&quot;845&quot; data-filename=&quot;스크린샷 2024-10-26 오후 6.47.21.png&quot; data-origin-width=&quot;1022&quot; data-origin-height=&quot;845&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2024-10-26 오후 6.47.24.png&quot; data-origin-width=&quot;1832&quot; data-origin-height=&quot;1473&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/boPtiC/btsKk69xEqK/TcTRKXyKaKntkPQUQ8tix0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/boPtiC/btsKk69xEqK/TcTRKXyKaKntkPQUQ8tix0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/boPtiC/btsKk69xEqK/TcTRKXyKaKntkPQUQ8tix0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FboPtiC%2FbtsKk69xEqK%2FTcTRKXyKaKntkPQUQ8tix0%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;1832&quot; height=&quot;1473&quot; data-filename=&quot;스크린샷 2024-10-26 오후 6.47.24.png&quot; data-origin-width=&quot;1832&quot; data-origin-height=&quot;1473&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;url로 접속하면 다음과 같은 페이지에 접근가능합니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2024-10-26 오후 6.49.28.png&quot; data-origin-width=&quot;1832&quot; data-origin-height=&quot;1473&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/biw2hI/btsKkcirzp2/tcjVAscQ6rjUYciyGQ7cVK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/biw2hI/btsKkcirzp2/tcjVAscQ6rjUYciyGQ7cVK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/biw2hI/btsKkcirzp2/tcjVAscQ6rjUYciyGQ7cVK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbiw2hI%2FbtsKkcirzp2%2FtcjVAscQ6rjUYciyGQ7cVK%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;1832&quot; height=&quot;1473&quot; data-filename=&quot;스크린샷 2024-10-26 오후 6.49.28.png&quot; data-origin-width=&quot;1832&quot; data-origin-height=&quot;1473&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;네임스페이스를 선택하여 hubble UI에 접근 가능합니다. 원하는대로 트래픽을 필터링할 수 있습니다.&lt;/p&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;h2 data-ke-size=&quot;size26&quot;&gt;네트워크&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;패킷 흐름&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Endpoint to Endpoint&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1382&quot; data-origin-height=&quot;390&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/6M1Yc/btsKk7UY6eA/Hw29AU9agPRduRPr0Yobxk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/6M1Yc/btsKk7UY6eA/Hw29AU9agPRduRPr0Yobxk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/6M1Yc/btsKk7UY6eA/Hw29AU9agPRduRPr0Yobxk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F6M1Yc%2FbtsKk7UY6eA%2FHw29AU9agPRduRPr0Yobxk%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;1382&quot; height=&quot;390&quot; data-origin-width=&quot;1382&quot; data-origin-height=&quot;390&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span data-token-index=&quot;0&quot;&gt;Egress from Endpoint&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;1386&quot; data-origin-height=&quot;758&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/VlMmb/btsKlQLKnI1/B4jGftEkAML1h5k31kXud1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/VlMmb/btsKlQLKnI1/B4jGftEkAML1h5k31kXud1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/VlMmb/btsKlQLKnI1/B4jGftEkAML1h5k31kXud1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FVlMmb%2FbtsKlQLKnI1%2FB4jGftEkAML1h5k31kXud1%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;1386&quot; height=&quot;758&quot; data-origin-width=&quot;1386&quot; data-origin-height=&quot;758&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span data-token-index=&quot;0&quot;&gt;Ingress to Endpoint&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;1626&quot; data-origin-height=&quot;783&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/QXqQT/btsKk0anfM8/ljnWbOd7LSzKqOecM5RaTk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/QXqQT/btsKk0anfM8/ljnWbOd7LSzKqOecM5RaTk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/QXqQT/btsKk0anfM8/ljnWbOd7LSzKqOecM5RaTk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FQXqQT%2FbtsKk0anfM8%2FljnWbOd7LSzKqOecM5RaTk%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;1626&quot; height=&quot;783&quot; data-origin-width=&quot;1626&quot; data-origin-height=&quot;783&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;노드간 파드 통신&lt;/h3&gt;
&lt;pre id=&quot;code_1729940495088&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;cat &amp;lt;&amp;lt;EOF | kubectl create -f -
apiVersion: v1
kind: Pod
metadata:
  name: netpod
  labels:
    app: netpod
spec:
  nodeName: k8s-s
  containers:
  - name: netshoot-pod
    image: nicolaka/netshoot
    command: [&quot;tail&quot;]
    args: [&quot;-f&quot;, &quot;/dev/null&quot;]
  terminationGracePeriodSeconds: 0
---
apiVersion: v1
kind: Pod
metadata:
  name: webpod1
  labels:
    app: webpod
spec:
  nodeName: k8s-w1
  containers:
  - name: container
    image: traefik/whoami
  terminationGracePeriodSeconds: 0
---
apiVersion: v1
kind: Pod
metadata:
  name: webpod2
  labels:
    app: webpod
spec:
  nodeName: k8s-w2
  containers:
  - name: container
    image: traefik/whoami
  terminationGracePeriodSeconds: 0
EOF&lt;/code&gt;&lt;/pre&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&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2024-10-26 오후 8.01.56.png&quot; data-origin-width=&quot;1034&quot; data-origin-height=&quot;845&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/pQaQW/btsKlWrnLYg/2N16itbKLNaoYfKb3WfG6k/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/pQaQW/btsKlWrnLYg/2N16itbKLNaoYfKb3WfG6k/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/pQaQW/btsKlWrnLYg/2N16itbKLNaoYfKb3WfG6k/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FpQaQW%2FbtsKlWrnLYg%2F2N16itbKLNaoYfKb3WfG6k%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;1034&quot; height=&quot;845&quot; data-filename=&quot;스크린샷 2024-10-26 오후 8.01.56.png&quot; data-origin-width=&quot;1034&quot; data-origin-height=&quot;845&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;3개의 파드가 배포됩니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1729940550482&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;c0 status --verbose | grep Allocated -A5
c1 status --verbose | grep Allocated -A5
c2 status --verbose | grep Allocated -A5&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;앞에서 설정한 단축어(alias)로 cilium 의 상태를 확인해보겠습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2024-10-26 오후 8.02.08.png&quot; data-origin-width=&quot;1034&quot; data-origin-height=&quot;845&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/duPsdx/btsKlZhlpkb/CvTbRvIq0NV71AfwnLD080/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/duPsdx/btsKlZhlpkb/CvTbRvIq0NV71AfwnLD080/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/duPsdx/btsKlZhlpkb/CvTbRvIq0NV71AfwnLD080/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FduPsdx%2FbtsKlZhlpkb%2FCvTbRvIq0NV71AfwnLD080%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;1034&quot; height=&quot;845&quot; data-filename=&quot;스크린샷 2024-10-26 오후 8.02.08.png&quot; data-origin-width=&quot;1034&quot; data-origin-height=&quot;845&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;pre id=&quot;code_1729940686974&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;# cilium endpoint 조회
kubectl get ciliumendpoints
kubectl get ciliumendpoints -A

# c0 cilium pod의 endpoint 목록 조회
c0 endpoint list

# c0 cilium pod의 bpf endpoint 목록 조회
c0 bpf endpoint list

# c0 cilium pod bpf map 중 cilium_lxc 조회
c0 map get cilium_lxc

# c0 ip 조회
c0 ip list&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2024-10-26 오후 8.04.59.png&quot; data-origin-width=&quot;1034&quot; data-origin-height=&quot;845&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/yQ01y/btsKmhIPAnY/Ccpy0egdBZTSFl8s1b4fT1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/yQ01y/btsKmhIPAnY/Ccpy0egdBZTSFl8s1b4fT1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/yQ01y/btsKmhIPAnY/Ccpy0egdBZTSFl8s1b4fT1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FyQ01y%2FbtsKmhIPAnY%2FCcpy0egdBZTSFl8s1b4fT1%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;1034&quot; height=&quot;845&quot; data-filename=&quot;스크린샷 2024-10-26 오후 8.04.59.png&quot; data-origin-width=&quot;1034&quot; data-origin-height=&quot;845&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2024-10-26 오후 8.05.14.png&quot; data-origin-width=&quot;1148&quot; data-origin-height=&quot;845&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/v9HGF/btsKkhDN35o/zShNJym0hg0rRKLe9Wu8tk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/v9HGF/btsKkhDN35o/zShNJym0hg0rRKLe9Wu8tk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/v9HGF/btsKkhDN35o/zShNJym0hg0rRKLe9Wu8tk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fv9HGF%2FbtsKkhDN35o%2FzShNJym0hg0rRKLe9Wu8tk%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;1148&quot; height=&quot;845&quot; data-filename=&quot;스크린샷 2024-10-26 오후 8.05.14.png&quot; data-origin-width=&quot;1148&quot; data-origin-height=&quot;845&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2024-10-26 오후 8.05.26.png&quot; data-origin-width=&quot;1148&quot; data-origin-height=&quot;845&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/G6EZA/btsKkuv6z5q/VotXwEEzvhVscYchmTcY01/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/G6EZA/btsKkuv6z5q/VotXwEEzvhVscYchmTcY01/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/G6EZA/btsKkuv6z5q/VotXwEEzvhVscYchmTcY01/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FG6EZA%2FbtsKkuv6z5q%2FVotXwEEzvhVscYchmTcY01%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;1148&quot; height=&quot;845&quot; data-filename=&quot;스크린샷 2024-10-26 오후 8.05.26.png&quot; data-origin-width=&quot;1148&quot; data-origin-height=&quot;845&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2024-10-26 오후 8.05.33.png&quot; data-origin-width=&quot;1148&quot; data-origin-height=&quot;845&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bwbZmj/btsKj2AaPJT/zNkt7cFDXrnFebvgKHiZHK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bwbZmj/btsKj2AaPJT/zNkt7cFDXrnFebvgKHiZHK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bwbZmj/btsKj2AaPJT/zNkt7cFDXrnFebvgKHiZHK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbwbZmj%2FbtsKj2AaPJT%2FzNkt7cFDXrnFebvgKHiZHK%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;1148&quot; height=&quot;845&quot; data-filename=&quot;스크린샷 2024-10-26 오후 8.05.33.png&quot; data-origin-width=&quot;1148&quot; data-origin-height=&quot;845&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2024-10-26 오후 8.05.59.png&quot; data-origin-width=&quot;1148&quot; data-origin-height=&quot;901&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/m5B1e/btsKkIHVqep/kZkuudDOADAaRuMOERzXZK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/m5B1e/btsKkIHVqep/kZkuudDOADAaRuMOERzXZK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/m5B1e/btsKkIHVqep/kZkuudDOADAaRuMOERzXZK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fm5B1e%2FbtsKkIHVqep%2FkZkuudDOADAaRuMOERzXZK%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;1148&quot; height=&quot;901&quot; data-filename=&quot;스크린샷 2024-10-26 오후 8.05.59.png&quot; data-origin-width=&quot;1148&quot; data-origin-height=&quot;901&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;파드간 통신을 위해 이번에도 단축어를 지정해줍니다.&lt;/p&gt;
&lt;pre id=&quot;code_1729940879331&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;# 테스트 파드들 IP
NETPODIP=$(kubectl get pods netpod -o jsonpath='{.status.podIP}')
WEBPOD1IP=$(kubectl get pods webpod1 -o jsonpath='{.status.podIP}')
WEBPOD2IP=$(kubectl get pods webpod2 -o jsonpath='{.status.podIP}')

# 단축키(alias) 지정
alias p0=&quot;kubectl exec -it netpod  -- &quot;
alias p1=&quot;kubectl exec -it webpod1 -- &quot;
alias p2=&quot;kubectl exec -it webpod2 -- &quot;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이후, 파드에 통신을 보내보겠습니다.&lt;/p&gt;
&lt;pre id=&quot;code_1729940921511&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;# netpod 네트워크 정보 확인
p0 ip -c -4 addr
p0 route -n
p0 ping -c 1 $WEBPOD1IP &amp;amp;&amp;amp; p0 ping -c 1 $WEBPOD2IP
p0 curl -s $WEBPOD1IP &amp;amp;&amp;amp; p0 curl -s $WEBPOD2IP
p0 curl -s $WEBPOD1IP:8080 ; p0 curl -s $WEBPOD2IP:8080
p0 ping -c 1 8.8.8.8 &amp;amp;&amp;amp; p0 curl -s wttr.in/seoul
p0 ip -c neigh&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2024-10-26 오후 8.08.51.png&quot; data-origin-width=&quot;1022&quot; data-origin-height=&quot;1251&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bKt1Ke/btsKmlxHdC0/kHwOrGNuDTPDcKjTeuYjGk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bKt1Ke/btsKmlxHdC0/kHwOrGNuDTPDcKjTeuYjGk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bKt1Ke/btsKmlxHdC0/kHwOrGNuDTPDcKjTeuYjGk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbKt1Ke%2FbtsKmlxHdC0%2FkHwOrGNuDTPDcKjTeuYjGk%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;1022&quot; height=&quot;1251&quot; data-filename=&quot;스크린샷 2024-10-26 오후 8.08.51.png&quot; data-origin-width=&quot;1022&quot; data-origin-height=&quot;1251&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;파드 0 에서 파드 1로 요청하는 경우, 파드 0 에서 파드 2로 요청하는 경우,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;파드 0에서 파드 1로 8080포트로 요청하는 경우, 파드 0에서 파드 2로 8080포트로 요청하는 경우&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;파드 0에서 8.8.8.8 (google dns)로 요청하는 경우, 파드0에서 wttr.in/seoul (날씨 사이트로 요청하는 경우)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;를 한번에 보내봤습니다. 통신이 잘 되는 것을 확인할 수 있습니다.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2024-10-26 오후 8.09.32.png&quot; data-origin-width=&quot;1580&quot; data-origin-height=&quot;1473&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/D1zk9/btsKmigF82k/7xAnYBedDs9u0KE284woL1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/D1zk9/btsKmigF82k/7xAnYBedDs9u0KE284woL1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/D1zk9/btsKmigF82k/7xAnYBedDs9u0KE284woL1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FD1zk9%2FbtsKmigF82k%2F7xAnYBedDs9u0KE284woL1%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;1580&quot; height=&quot;1473&quot; data-filename=&quot;스크린샷 2024-10-26 오후 8.09.32.png&quot; data-origin-width=&quot;1580&quot; data-origin-height=&quot;1473&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2024-10-26 오후 8.12.28.png&quot; data-origin-width=&quot;1580&quot; data-origin-height=&quot;1473&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dh5zBe/btsKkFxCbHK/PQBtsAIYT9qB22rciuk5Sk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dh5zBe/btsKkFxCbHK/PQBtsAIYT9qB22rciuk5Sk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dh5zBe/btsKkFxCbHK/PQBtsAIYT9qB22rciuk5Sk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fdh5zBe%2FbtsKkFxCbHK%2FPQBtsAIYT9qB22rciuk5Sk%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;1580&quot; height=&quot;1473&quot; data-filename=&quot;스크린샷 2024-10-26 오후 8.12.28.png&quot; data-origin-width=&quot;1580&quot; data-origin-height=&quot;1473&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Hubble에서 마찬가지로 각 파드간 통신 기록을 즉각적으로 확인할 수 있습니다. 상세정보를 확인하고자 하는 내역을 클릭하면 자세한 정보가 추가로 나타납니다.&lt;/p&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;h3 data-ke-size=&quot;size23&quot;&gt;서비스 통신&lt;/h3&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;897&quot; data-origin-height=&quot;378&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/drR2cG/btsKlYQg2VA/bxqOMjyKfk90xwyDtX6uFK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/drR2cG/btsKlYQg2VA/bxqOMjyKfk90xwyDtX6uFK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/drR2cG/btsKlYQg2VA/bxqOMjyKfk90xwyDtX6uFK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdrR2cG%2FbtsKlYQg2VA%2FbxqOMjyKfk90xwyDtX6uFK%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;897&quot; height=&quot;378&quot; data-origin-width=&quot;897&quot; data-origin-height=&quot;378&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;(좌) 네트워크 기반 로드밸런싱 vs (우) 소켓 기반 로드밸런싱&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;동작하는 앱이 &lt;span data-token-index=&quot;1&quot;&gt;connect() 시스템콜&lt;/span&gt;을 이용하여 소켓을 연결할 때 목적지 주소가 서비스 주소(10.10.8.55)이면 소켓의 목적지 주소를 바로 백엔드 주소(10.0.0.31)로 설정합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이후 앱에서 해당 소켓을 통해 보내는 모든 패킷의 목적지 주소는 이미 백엔드 주소(10.0.0.31)로 설정되어 있기 때문에 중간에 &lt;span data-token-index=&quot;3&quot;&gt;DNAT 변환 및 역변환 과정이 필요없어집니다.&amp;nbsp; (network hop이 줄어듬)&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;937&quot; data-origin-height=&quot;477&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/nmfrn/btsKkX5PmW7/11zkG8kSYuxCJ0iC48dIt0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/nmfrn/btsKkX5PmW7/11zkG8kSYuxCJ0iC48dIt0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/nmfrn/btsKkX5PmW7/11zkG8kSYuxCJ0iC48dIt0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fnmfrn%2FbtsKkX5PmW7%2F11zkG8kSYuxCJ0iC48dIt0%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;937&quot; height=&quot;477&quot; data-origin-width=&quot;937&quot; data-origin-height=&quot;477&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1008&quot; data-origin-height=&quot;297&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/butLNN/btsKj4EFYF1/j7yrHFkzksIs32sDcqNTaK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/butLNN/btsKj4EFYF1/j7yrHFkzksIs32sDcqNTaK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/butLNN/btsKj4EFYF1/j7yrHFkzksIs32sDcqNTaK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbutLNN%2FbtsKj4EFYF1%2Fj7yrHFkzksIs32sDcqNTaK%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;1008&quot; height=&quot;297&quot; data-origin-width=&quot;1008&quot; data-origin-height=&quot;297&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;socket send/recv: socket send/recv&amp;nbsp; hook은 TCP 소켓의 모든 송/수신 작업에서 실행되고 hook에서 검사/삭제/리다이렉션 하게 되빈다. 즉, Pod 내에서 Syscall에 Hook을 걸어 요청을 변경해버립니다. (아주 빠름)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;실습&lt;/h4&gt;
&lt;pre id=&quot;code_1729941882577&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;cat &amp;lt;&amp;lt;EOF | kubectl create -f -
apiVersion: v1
kind: Service
metadata:
  name: svc
spec:
  ports:
    - name: svc-webport
      port: 80
      targetPort: 80
  selector:
    app: webpod
  type: ClusterIP
EOF&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;코드 블록를 실행해줍니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1729941963179&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;# 서비스IP를 변수에 지정
SVCIP=$(kubectl get svc svc -o jsonpath='{.spec.clusterIP}')

# Pod1 에서 Service(ClusterIP) 접속 트래픽 발생
kubectl exec netpod -- curl -s $SVCIP
kubectl exec netpod -- curl -s $SVCIP | grep Hostname&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;netpod 파드에서 (pod1) 서비스의 IP에 요청을 보내보겠습니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2024-10-26 오후 8.25.47.png&quot; data-origin-width=&quot;1022&quot; data-origin-height=&quot;845&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/p97v7/btsKlNBoBg2/X1VqRa2bv7CEZLct9uMh10/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/p97v7/btsKlNBoBg2/X1VqRa2bv7CEZLct9uMh10/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/p97v7/btsKlNBoBg2/X1VqRa2bv7CEZLct9uMh10/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fp97v7%2FbtsKlNBoBg2%2FX1VqRa2bv7CEZLct9uMh10%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;1022&quot; height=&quot;845&quot; data-filename=&quot;스크린샷 2024-10-26 오후 8.25.47.png&quot; data-origin-width=&quot;1022&quot; data-origin-height=&quot;845&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2024-10-26 오후 8.30.13.png&quot; data-origin-width=&quot;1580&quot; data-origin-height=&quot;1099&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/vg9Be/btsKk3x94k6/nILy5G2iCmp1YlaLop1NO1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/vg9Be/btsKk3x94k6/nILy5G2iCmp1YlaLop1NO1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/vg9Be/btsKk3x94k6/nILy5G2iCmp1YlaLop1NO1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fvg9Be%2FbtsKk3x94k6%2FnILy5G2iCmp1YlaLop1NO1%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;1580&quot; height=&quot;1099&quot; data-filename=&quot;스크린샷 2024-10-26 오후 8.30.13.png&quot; data-origin-width=&quot;1580&quot; data-origin-height=&quot;1099&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2024-10-26 오후 8.34.30.png&quot; data-origin-width=&quot;1022&quot; data-origin-height=&quot;845&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/y2gZA/btsKkHoIUXC/yJjlUOtcyKKKTHbek7k81k/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/y2gZA/btsKkHoIUXC/yJjlUOtcyKKKTHbek7k81k/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/y2gZA/btsKkHoIUXC/yJjlUOtcyKKKTHbek7k81k/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fy2gZA%2FbtsKkHoIUXC%2FyJjlUOtcyKKKTHbek7k81k%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;1022&quot; height=&quot;845&quot; data-filename=&quot;스크린샷 2024-10-26 오후 8.34.30.png&quot; data-origin-width=&quot;1022&quot; data-origin-height=&quot;845&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;실제로 내부에서 어떻게 동작하는지 자세히 살펴봅시다.&amp;nbsp;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1729942657118&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;kubectl exec netpod -- strace -s 65535 -f -tt curl -s $SVCIP&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2024-10-26 오후 8.36.16.png&quot; data-origin-width=&quot;1234&quot; data-origin-height=&quot;464&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/X2T6B/btsKkkgcGAy/PAQUv1NQ9rMj1UKT3fLi4k/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/X2T6B/btsKkkgcGAy/PAQUv1NQ9rMj1UKT3fLi4k/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/X2T6B/btsKkkgcGAy/PAQUv1NQ9rMj1UKT3fLi4k/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FX2T6B%2FbtsKkkgcGAy%2FPAQUv1NQ9rMj1UKT3fLi4k%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;464&quot; data-filename=&quot;스크린샷 2024-10-26 오후 8.36.16.png&quot; data-origin-width=&quot;1234&quot; data-origin-height=&quot;464&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;strace 명령어로 curl 명령이 어떻게 동작했는지 살펴보겠습니다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;302번 라인에서 connect call이 발생합니다. 대상은 10.10.201.234 이 ip는 서비스의 ip입니다. 이때는 서비스의 ip로 요청을 하는 걸 알 수 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;하지만 바로 다음 라인인 getsockname 에서는 172.16.0.182 아이피로 변경되었습니다. 바로 도착지 pod의 ip인 것을 확인할 수 있습니다.&lt;/p&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&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1716&quot; data-origin-height=&quot;880&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dehXb5/btsKkGpMFeJ/gSVJJNsw7S34b2vwkNV9o0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dehXb5/btsKkGpMFeJ/gSVJJNsw7S34b2vwkNV9o0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dehXb5/btsKkGpMFeJ/gSVJJNsw7S34b2vwkNV9o0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdehXb5%2FbtsKkGpMFeJ%2FgSVJJNsw7S34b2vwkNV9o0%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;1716&quot; height=&quot;880&quot; data-origin-width=&quot;1716&quot; data-origin-height=&quot;880&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;앞선 그림의 이부분에 해당하는 과정입니다. 이를 통해 service ip (clusterIP)로 요청을 했으나 실제로는 도착지 파드 ip로 &lt;b&gt;바로&lt;/b&gt; 연결되어 있음을 알 수 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;코멘트: network stack을 말도 안되게 간소화 시켜버리는 것 같습니다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;리소스 삭제&lt;/p&gt;
&lt;pre id=&quot;code_1729943014509&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;kubectl delete pod --all &amp;amp;&amp;amp; kubectl delete svc svc&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;모니터링 (Prometheus &amp;amp; Grafana)&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;구성&lt;/h3&gt;
&lt;pre id=&quot;code_1729943154270&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;# 배포
kubectl apply -f https://raw.githubusercontent.com/cilium/cilium/1.16.3/examples/kubernetes/addons/prometheus/monitoring-example.yaml
kubectl get all -n cilium-monitoring

# NodePort 설정
kubectl patch svc grafana -n cilium-monitoring -p '{&quot;spec&quot;: {&quot;type&quot;: &quot;NodePort&quot;}}'
kubectl patch svc prometheus -n cilium-monitoring -p '{&quot;spec&quot;: {&quot;type&quot;: &quot;NodePort&quot;}}'&lt;/code&gt;&lt;/pre&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;h3 data-ke-size=&quot;size23&quot;&gt;접속&lt;/h3&gt;
&lt;pre id=&quot;code_1729943198937&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;# Grafana 웹 접속
GPT=$(kubectl get svc -n cilium-monitoring grafana -o jsonpath={.spec.ports[0].nodePort})
echo -e &quot;Grafana URL = http://$(curl -s ipinfo.io/ip):$GPT&quot;

# Prometheus 웹 접속 정보 확인
PPT=$(kubectl get svc -n cilium-monitoring prometheus -o jsonpath={.spec.ports[0].nodePort})
echo -e &quot;Prometheus URL = http://$(curl -s ipinfo.io/ip):$PPT&quot;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2024-10-26 오후 8.48.44.png&quot; data-origin-width=&quot;1905&quot; data-origin-height=&quot;1255&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cOm1xz/btsKlGoKr7Z/VQGfR2ydNIsb8ZyWmPzg1K/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cOm1xz/btsKlGoKr7Z/VQGfR2ydNIsb8ZyWmPzg1K/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cOm1xz/btsKlGoKr7Z/VQGfR2ydNIsb8ZyWmPzg1K/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcOm1xz%2FbtsKlGoKr7Z%2FVQGfR2ydNIsb8ZyWmPzg1K%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;1905&quot; height=&quot;1255&quot; data-filename=&quot;스크린샷 2024-10-26 오후 8.48.44.png&quot; data-origin-width=&quot;1905&quot; data-origin-height=&quot;1255&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;br /&gt;&amp;nbsp;prometheus 웹 접속을 통해서 메트릭 지표를 살펴볼 수 있습니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2024-10-26 오후 8.46.22.png&quot; data-origin-width=&quot;1022&quot; data-origin-height=&quot;845&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/be1lzZ/btsKl4bOL1B/tbldqdfndLGFrG4YdkhSHK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/be1lzZ/btsKl4bOL1B/tbldqdfndLGFrG4YdkhSHK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/be1lzZ/btsKl4bOL1B/tbldqdfndLGFrG4YdkhSHK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbe1lzZ%2FbtsKl4bOL1B%2FtbldqdfndLGFrG4YdkhSHK%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;1022&quot; height=&quot;845&quot; data-filename=&quot;스크린샷 2024-10-26 오후 8.46.22.png&quot; data-origin-width=&quot;1022&quot; data-origin-height=&quot;845&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;cilium 에서 제공하는&amp;nbsp; monitoring example 헬름차트에는 cilium dashboard가 기본구성으로 포함되어 있습니다.&lt;br /&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2024-10-26 오후 8.47.43.png&quot; data-origin-width=&quot;1476&quot; data-origin-height=&quot;1080&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/csl0hB/btsKkpVSkYF/C6mmTTkXPKLioAgMlwzuAK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/csl0hB/btsKkpVSkYF/C6mmTTkXPKLioAgMlwzuAK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/csl0hB/btsKkpVSkYF/C6mmTTkXPKLioAgMlwzuAK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fcsl0hB%2FbtsKkpVSkYF%2FC6mmTTkXPKLioAgMlwzuAK%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;1476&quot; height=&quot;1080&quot; data-filename=&quot;스크린샷 2024-10-26 오후 8.47.43.png&quot; data-origin-width=&quot;1476&quot; data-origin-height=&quot;1080&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2024-10-26 오후 8.50.09.png&quot; data-origin-width=&quot;1476&quot; data-origin-height=&quot;1080&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/NDyN3/btsKljARLgz/H3BtsHylUJOUWv02FkmLk1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/NDyN3/btsKljARLgz/H3BtsHylUJOUWv02FkmLk1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/NDyN3/btsKljARLgz/H3BtsHylUJOUWv02FkmLk1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FNDyN3%2FbtsKljARLgz%2FH3BtsHylUJOUWv02FkmLk1%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;1476&quot; height=&quot;1080&quot; data-filename=&quot;스크린샷 2024-10-26 오후 8.50.09.png&quot; data-origin-width=&quot;1476&quot; data-origin-height=&quot;1080&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;cilium metric 을 확인할 수 있는 대시보드 cilium cni의 모니터링을 하기위한 목적으로 사용할 수 있습니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2024-10-26 오후 8.50.20.png&quot; data-origin-width=&quot;1476&quot; data-origin-height=&quot;1080&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/pO5va/btsKld8oQuB/37cOgjjw2V522GhgkRDLx0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/pO5va/btsKld8oQuB/37cOgjjw2V522GhgkRDLx0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/pO5va/btsKld8oQuB/37cOgjjw2V522GhgkRDLx0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FpO5va%2FbtsKld8oQuB%2F37cOgjjw2V522GhgkRDLx0%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;1476&quot; height=&quot;1080&quot; data-filename=&quot;스크린샷 2024-10-26 오후 8.50.20.png&quot; data-origin-width=&quot;1476&quot; data-origin-height=&quot;1080&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Hubble UI에서 확인할 수 있는 지표를 Grafana에서도 Prometheus를 통해 함께 확인할 수 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;Network Policy (L3, L4, L7)&lt;/h2&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1346&quot; data-origin-height=&quot;632&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bJYoJV/btsKllMePeU/TVwk7zPBTumkWO6l7ALviK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bJYoJV/btsKllMePeU/TVwk7zPBTumkWO6l7ALviK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bJYoJV/btsKllMePeU/TVwk7zPBTumkWO6l7ALviK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbJYoJV%2FbtsKllMePeU%2FTVwk7zPBTumkWO6l7ALviK%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;1346&quot; height=&quot;632&quot; data-origin-width=&quot;1346&quot; data-origin-height=&quot;632&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;ID 기반 (L3)&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;파드의 label을 활용하여&amp;nbsp;엔드포인트간의 연결을 제어합니다.&lt;/li&gt;
&lt;li&gt;label role=frontend가 있는 모든 엔드포인트는 label role=backend가 있는 모든 엔드포인트에 연결할 수 있습니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Port 기반 (L4)&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;들어오는 요청/나가는 요청에 대해서 허용할 포트를 제한할 수 있습니다.&lt;/li&gt;
&lt;li&gt;예를 들어, 위 그림에서 label이 role=frontend인 엔드포인트는 포트 443(https)에서만 나가는 연결을 만들 수 있습니다.&lt;/li&gt;
&lt;li&gt;엔드포인트 role=backend는 포트 443(https)에서만 연결을 허용할 수 있습니다.&lt;/li&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;애플리케이션 기반 (L7)&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;암호화된 HTTP 및 원격 프로시저 호출(RPC) 프로토콜을 위해 애플리케이션 수준에서 세분화된 액세스 제어를 제공합니다.&amp;nbsp;&lt;/li&gt;
&lt;li&gt;label role=frontend이 있는 엔드포인트는 REST API 호출 GET/userdata/[0-9]+만 수행할 수 있습니다.&lt;/li&gt;
&lt;li&gt;role=backend가 있는 다른 모든 API 상호 작용은 제한됩니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1159&quot; data-origin-height=&quot;855&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bqdaGg/btsKlwGH2cI/8v7yZB6S2Uk3c1NSPwipt1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bqdaGg/btsKlwGH2cI/8v7yZB6S2Uk3c1NSPwipt1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bqdaGg/btsKlwGH2cI/8v7yZB6S2Uk3c1NSPwipt1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbqdaGg%2FbtsKlwGH2cI%2F8v7yZB6S2Uk3c1NSPwipt1%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;1159&quot; height=&quot;855&quot; data-origin-width=&quot;1159&quot; data-origin-height=&quot;855&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&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;h3 data-ke-size=&quot;size23&quot;&gt;실습&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;스타워즈 데모&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1294&quot; data-origin-height=&quot;920&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/4TB9L/btsKlmqQ8xN/26A8bsg9ozSxTP5lByTHdK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/4TB9L/btsKlmqQ8xN/26A8bsg9ozSxTP5lByTHdK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/4TB9L/btsKlmqQ8xN/26A8bsg9ozSxTP5lByTHdK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F4TB9L%2FbtsKlmqQ8xN%2F26A8bsg9ozSxTP5lByTHdK%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;1294&quot; height=&quot;920&quot; data-origin-width=&quot;1294&quot; data-origin-height=&quot;920&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;pre id=&quot;code_1729944186914&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;# 리소스 배포
kubectl create -f https://raw.githubusercontent.com/cilium/cilium/1.16.3/examples/minikube/http-sw-app.yaml&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;배포 후 파드의 label을 확인합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2024-10-26 오후 9.03.57.png&quot; data-origin-width=&quot;1192&quot; data-origin-height=&quot;845&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bGVLSy/btsKliPuTjZ/90ljekJvYZDTGkuE0uknAK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bGVLSy/btsKliPuTjZ/90ljekJvYZDTGkuE0uknAK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bGVLSy/btsKliPuTjZ/90ljekJvYZDTGkuE0uknAK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbGVLSy%2FbtsKliPuTjZ%2F90ljekJvYZDTGkuE0uknAK%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;1192&quot; height=&quot;845&quot; data-filename=&quot;스크린샷 2024-10-26 오후 9.03.57.png&quot; data-origin-width=&quot;1192&quot; data-origin-height=&quot;845&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;리소스가 모두 배포된 뒤 실습 전 endpoint 정보를 확인하겠습니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2024-10-26 오후 9.08.30.png&quot; data-origin-width=&quot;1192&quot; data-origin-height=&quot;868&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/XdRZ3/btsKkgLGhGx/KS88IV6kj1ElFo0gEUKkC0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/XdRZ3/btsKkgLGhGx/KS88IV6kj1ElFo0gEUKkC0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/XdRZ3/btsKkgLGhGx/KS88IV6kj1ElFo0gEUKkC0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FXdRZ3%2FbtsKkgLGhGx%2FKS88IV6kj1ElFo0gEUKkC0%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;1192&quot; height=&quot;868&quot; data-filename=&quot;스크린샷 2024-10-26 오후 9.08.30.png&quot; data-origin-width=&quot;1192&quot; data-origin-height=&quot;868&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2024-10-26 오후 9.06.05.png&quot; data-origin-width=&quot;1192&quot; data-origin-height=&quot;845&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bvMZ8i/btsKknX384S/U2Uiul5oa7fX4oB9sOfCnK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bvMZ8i/btsKknX384S/U2Uiul5oa7fX4oB9sOfCnK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bvMZ8i/btsKknX384S/U2Uiul5oa7fX4oB9sOfCnK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbvMZ8i%2FbtsKknX384S%2FU2Uiul5oa7fX4oB9sOfCnK%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;1192&quot; height=&quot;845&quot; data-filename=&quot;스크린샷 2024-10-26 오후 9.06.05.png&quot; data-origin-width=&quot;1192&quot; data-origin-height=&quot;845&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2024-10-26 오후 9.06.10.png&quot; data-origin-width=&quot;1192&quot; data-origin-height=&quot;845&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/nqxBx/btsKj5KpRPh/9znygnmBKkC2QAP1xQtQD0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/nqxBx/btsKj5KpRPh/9znygnmBKkC2QAP1xQtQD0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/nqxBx/btsKj5KpRPh/9znygnmBKkC2QAP1xQtQD0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FnqxBx%2FbtsKj5KpRPh%2F9znygnmBKkC2QAP1xQtQD0%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;1192&quot; height=&quot;845&quot; data-filename=&quot;스크린샷 2024-10-26 오후 9.06.10.png&quot; data-origin-width=&quot;1192&quot; data-origin-height=&quot;845&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1729944632471&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;# xwing 파드에서 deathstar service로 요청
kubectl exec xwing -- curl -s -XPOST deathstar.default.svc.cluster.local/v1/request-landing

# tiefighter 파드에서 deathstar service로 요청
kubectl exec tiefighter -- curl -s -XPOST deathstar.default.svc.cluster.local/v1/request-landing&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이후 xwing 파드에 접속하여,&amp;nbsp; 데스스타 service로 요청을 보내보겠습니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2024-10-26 오후 9.07.54.png&quot; data-origin-width=&quot;1192&quot; data-origin-height=&quot;868&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/DPgci/btsKlZn8Mgp/N79BnPkWwDHOS0krmI69dK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/DPgci/btsKlZn8Mgp/N79BnPkWwDHOS0krmI69dK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/DPgci/btsKlZn8Mgp/N79BnPkWwDHOS0krmI69dK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FDPgci%2FbtsKlZn8Mgp%2FN79BnPkWwDHOS0krmI69dK%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;1192&quot; height=&quot;868&quot; data-filename=&quot;스크린샷 2024-10-26 오후 9.07.54.png&quot; data-origin-width=&quot;1192&quot; data-origin-height=&quot;868&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2024-10-26 오후 9.10.54.png&quot; data-origin-width=&quot;1192&quot; data-origin-height=&quot;868&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dspBl7/btsKlHurcXl/ACorV59Upf2kgYTtGvIny0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dspBl7/btsKlHurcXl/ACorV59Upf2kgYTtGvIny0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dspBl7/btsKlHurcXl/ACorV59Upf2kgYTtGvIny0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdspBl7%2FbtsKlHurcXl%2FACorV59Upf2kgYTtGvIny0%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;1192&quot; height=&quot;868&quot; data-filename=&quot;스크린샷 2024-10-26 오후 9.10.54.png&quot; data-origin-width=&quot;1192&quot; data-origin-height=&quot;868&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;곧바로 tiefighter에서도 deathstar 서비스로 요청을 보내보겠습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이제, hubble ui를 접속하면 xwing, tiefighter 가 데스스타에 잘 착륙(landing)한 것을 확인할 수 있습니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2024-10-26 오후 9.11.55.png&quot; data-origin-width=&quot;1466&quot; data-origin-height=&quot;1237&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bvWiik/btsKls5nw7S/taAJIeRDfj1H6IGZ91iCGK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bvWiik/btsKls5nw7S/taAJIeRDfj1H6IGZ91iCGK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bvWiik/btsKls5nw7S/taAJIeRDfj1H6IGZ91iCGK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbvWiik%2FbtsKls5nw7S%2FtaAJIeRDfj1H6IGZ91iCGK%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;1466&quot; height=&quot;1237&quot; data-filename=&quot;스크린샷 2024-10-26 오후 9.11.55.png&quot; data-origin-width=&quot;1466&quot; data-origin-height=&quot;1237&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이제 xwing이 착륙하지 못하도록 해보겠습니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1308&quot; data-origin-height=&quot;926&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/86anp/btsKkpO83p6/nlnxrvpD2LkUrCm959fLSK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/86anp/btsKkpO83p6/nlnxrvpD2LkUrCm959fLSK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/86anp/btsKkpO83p6/nlnxrvpD2LkUrCm959fLSK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F86anp%2FbtsKkpO83p6%2FnlnxrvpD2LkUrCm959fLSK%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;1308&quot; height=&quot;926&quot; data-origin-width=&quot;1308&quot; data-origin-height=&quot;926&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;pre id=&quot;code_1729944890456&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;cat &amp;lt;&amp;lt;EOF | kubectl apply -f -
apiVersion: &quot;cilium.io/v2&quot;
kind: CiliumNetworkPolicy
metadata:
  name: &quot;rule1&quot;
spec:
  description: &quot;L3-L4 policy to restrict deathstar access to empire ships only&quot;
  endpointSelector:
    matchLabels:
      org: empire
      class: deathstar
  ingress:
  - fromEndpoints:
    - matchLabels:
        org: empire
    toPorts:
    - ports:
      - port: &quot;80&quot;
        protocol: TCP
EOF&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2024-10-26 오후 9.14.31.png&quot; data-origin-width=&quot;1192&quot; data-origin-height=&quot;845&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/xYGLu/btsKkcJwvb8/fkXgeXs9DbfhdA8X63tOlk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/xYGLu/btsKkcJwvb8/fkXgeXs9DbfhdA8X63tOlk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/xYGLu/btsKkcJwvb8/fkXgeXs9DbfhdA8X63tOlk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FxYGLu%2FbtsKkcJwvb8%2FfkXgeXs9DbfhdA8X63tOlk%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;1192&quot; height=&quot;845&quot; data-filename=&quot;스크린샷 2024-10-26 오후 9.14.31.png&quot; data-origin-width=&quot;1192&quot; data-origin-height=&quot;845&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;데스스타에 착륙(요청) 가능한 파드는 org=empire 라벨이 할당된 tiefighter 가 될겁니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2024-10-26 오후 9.19.30.png&quot; data-origin-width=&quot;1192&quot; data-origin-height=&quot;845&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bb1HPj/btsKl7GpaDO/uIM4KKvH7q9EfdZWliesv1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bb1HPj/btsKl7GpaDO/uIM4KKvH7q9EfdZWliesv1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bb1HPj/btsKl7GpaDO/uIM4KKvH7q9EfdZWliesv1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbb1HPj%2FbtsKl7GpaDO%2FuIM4KKvH7q9EfdZWliesv1%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;1192&quot; height=&quot;845&quot; data-filename=&quot;스크린샷 2024-10-26 오후 9.19.30.png&quot; data-origin-width=&quot;1192&quot; data-origin-height=&quot;845&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;다시 curl을 사용하여 데스스타에 착륙 요청을 시도합니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2024-10-26 오후 9.19.39.png&quot; data-origin-width=&quot;1466&quot; data-origin-height=&quot;1237&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/qxeNn/btsKkbqlKBg/OVep3rYAVLKPA8m3QWBO20/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/qxeNn/btsKkbqlKBg/OVep3rYAVLKPA8m3QWBO20/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/qxeNn/btsKkbqlKBg/OVep3rYAVLKPA8m3QWBO20/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FqxeNn%2FbtsKkbqlKBg%2FOVep3rYAVLKPA8m3QWBO20%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;1466&quot; height=&quot;1237&quot; data-filename=&quot;스크린샷 2024-10-26 오후 9.19.39.png&quot; data-origin-width=&quot;1466&quot; data-origin-height=&quot;1237&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;예상과 동일하게 tiefighter는 landing(request) 가능한 반면, xwing은 요청이 차단됩니다. 이 또한 hubble ui에서 확인 가능합니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2024-10-26 오후 9.21.51.png&quot; data-origin-width=&quot;1192&quot; data-origin-height=&quot;845&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/pnoIK/btsKkIupfAW/YnNJhzCKdZKQ5rNPSr71ik/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/pnoIK/btsKkIupfAW/YnNJhzCKdZKQ5rNPSr71ik/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/pnoIK/btsKkIupfAW/YnNJhzCKdZKQ5rNPSr71ik/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FpnoIK%2FbtsKkIupfAW%2FYnNJhzCKdZKQ5rNPSr71ik%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;1192&quot; height=&quot;845&quot; data-filename=&quot;스크린샷 2024-10-26 오후 9.21.51.png&quot; data-origin-width=&quot;1192&quot; data-origin-height=&quot;845&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;L2 Announcements / L2 Aware LB (beta)&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;소개&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;L2 Announcements는 로컬 영역 네트워크에서 서비스를 표시하고 도달 가능하게 만드는 기능입니다. 이 기능은 주로 사무실 또는 캠퍼스 네트워크와 같이 &lt;span style=&quot;color: #ee2323;&quot;&gt;BGP 기반 라우팅이 없는 네트워크 내에서 온프레미스 배포를 위해 고안&lt;/span&gt;되었습니다.&lt;/li&gt;
&lt;li&gt;이 기능을 사용하면 ExternalIP 및/또는 LoadBalancer IP에 대한 ARP 쿼리에 응답합니다. 이러한 IP는 여러 노드의 가상 IP(네트워크 장치에 설치되지 않음)이므로 각 서비스에 대해 한 번에 한 노드가 ARP 쿼리에 응답하고 MAC 주소로 응답합니다. 이 노드는 서비스 로드 밸런싱 기능으로 로드 밸런싱을 수행하여 북쪽/남쪽 로드 밸런서 역할을 합니다.&lt;/li&gt;
&lt;li&gt;NodePort 서비스에 비해 이 기능의 장점은 &lt;span style=&quot;color: #ee2323;&quot;&gt;각 서비스가 고유한 IP를 사용&lt;/span&gt;할 수 있으므로 여러 서비스가 동일한 포트 번호를 사용할 수 있다는 것입니다. NodePort를 사용할 때 트래픽을 보낼 호스트를 결정하는 것은 클라이언트에게 달려 있으며 노드가 다운되면 IP+Port 콤보를 사용할 수 없게 됩니다. L2 공지를 사용하면 서비스 VIP가 다른 노드로 간단히 마이그레이션되고 계속 작동합니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1414&quot; data-origin-height=&quot;820&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/tck0n/btsKl2LSz9l/wqe90FXJ8yTg1aHkfk5DLk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/tck0n/btsKl2LSz9l/wqe90FXJ8yTg1aHkfk5DLk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/tck0n/btsKl2LSz9l/wqe90FXJ8yTg1aHkfk5DLk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Ftck0n%2FbtsKl2LSz9l%2Fwqe90FXJ8yTg1aHkfk5DLk%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;1414&quot; height=&quot;820&quot; data-origin-width=&quot;1414&quot; data-origin-height=&quot;820&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;실습&amp;nbsp;&lt;/h3&gt;
&lt;pre id=&quot;code_1729946000529&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;helm upgrade cilium cilium/cilium --namespace kube-system --reuse-values \
--set l2announcements.enabled=true --set externalIPs.enabled=true \
--set l2announcements.leaseDuration

# 설정 확인
c0 config --all  |grep L2

# CiliumL2AnnouncementPolicy 생성
cat &amp;lt;&amp;lt;EOF | kubectl apply -f - 
apiVersion: &quot;cilium.io/v2alpha1&quot;
kind: CiliumL2AnnouncementPolicy
metadata:
  name: policy1
spec:
  serviceSelector:
    matchLabels:
      color: blue
  nodeSelector:
    matchExpressions:
      - key: node-role.kubernetes.io/control-plane
        operator: DoesNotExist
  interfaces:
  - ^ens[0-9]+
  externalIPs: true
  loadBalancerIPs: true
EOF

# CiliumL2AnnouncementPolicy 생성 확인
kubectl get ciliuml2announcementpolicy
kc describe l2announcement

# CiliumLoadBalancerIPPool 생성
cat &amp;lt;&amp;lt;EOF | kubectl apply -f - 
apiVersion: &quot;cilium.io/v2alpha1&quot;
kind: CiliumLoadBalancerIPPool
metadata:
  name: &quot;cilium-pool&quot;
spec:
  allowFirstLastIPs: &quot;No&quot;
  blocks:
  - cidr: &quot;10.10.200.0/29&quot;
EOF

# cilium ip pool 조회
kubectl get CiliumLoadBalancerIPPool&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2024-10-26 오후 9.33.57.png&quot; data-origin-width=&quot;1192&quot; data-origin-height=&quot;845&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dOBRAc/btsKl1F84c5/FdTTWOR8lxQxdGgjGAMdj1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dOBRAc/btsKl1F84c5/FdTTWOR8lxQxdGgjGAMdj1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dOBRAc/btsKl1F84c5/FdTTWOR8lxQxdGgjGAMdj1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdOBRAc%2FbtsKl1F84c5%2FFdTTWOR8lxQxdGgjGAMdj1%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;1192&quot; height=&quot;845&quot; data-filename=&quot;스크린샷 2024-10-26 오후 9.33.57.png&quot; data-origin-width=&quot;1192&quot; data-origin-height=&quot;845&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;예제 코드를 실행하여 간단히 구성한 뒤, 설정을 확인할 수 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;테스트 파드 생성&lt;/p&gt;
&lt;pre id=&quot;code_1729946072138&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;cat &amp;lt;&amp;lt;EOF | kubectl apply -f -
apiVersion: v1
kind: Pod
metadata:
  name: webpod1
  labels:
    app: webpod
spec:
  nodeName: k8s-w1
  containers:
  - name: container
    image: traefik/whoami
  terminationGracePeriodSeconds: 0
---
apiVersion: v1
kind: Pod
metadata:
  name: webpod2
  labels:
    app: webpod
spec:
  nodeName: k8s-w2
  containers:
  - name: container
    image: traefik/whoami
  terminationGracePeriodSeconds: 0
---
apiVersion: v1
kind: Service
metadata:
  name: svc1
spec:
  ports:
    - name: svc1-webport
      port: 80
      targetPort: 80
  selector:
    app: webpod
  type: LoadBalancer  # 서비스 타입이 LoadBalancer
---
apiVersion: v1
kind: Service
metadata:
  name: svc2
spec:
  ports:
    - name: svc2-webport
      port: 80
      targetPort: 80
  selector:
    app: webpod
  type: LoadBalancer
---
apiVersion: v1
kind: Service
metadata:
  name: svc3
spec:
  ports:
    - name: svc3-webport
      port: 80
      targetPort: 80
  selector:
    app: webpod
  type: LoadBalancer
EOF&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2024-10-26 오후 9.35.31.png&quot; data-origin-width=&quot;1192&quot; data-origin-height=&quot;845&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dGA98S/btsKkeOaC0Q/upjKaFKNoiQ4lOqlBBDgfk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dGA98S/btsKkeOaC0Q/upjKaFKNoiQ4lOqlBBDgfk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dGA98S/btsKkeOaC0Q/upjKaFKNoiQ4lOqlBBDgfk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdGA98S%2FbtsKkeOaC0Q%2FupjKaFKNoiQ4lOqlBBDgfk%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;1192&quot; height=&quot;845&quot; data-filename=&quot;스크린샷 2024-10-26 오후 9.35.31.png&quot; data-origin-width=&quot;1192&quot; data-origin-height=&quot;845&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이렇게 클라우드 환경이 아닌 온프레미스 환경에서 loadbalancer 유형의 서비스를 활용할 수 있습니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2024-10-26 오후 9.35.47.png&quot; data-origin-width=&quot;1192&quot; data-origin-height=&quot;845&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bn2ruA/btsKl8kZQXe/kPEluLDMlsCnkw0kexs3Q1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bn2ruA/btsKl8kZQXe/kPEluLDMlsCnkw0kexs3Q1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bn2ruA/btsKl8kZQXe/kPEluLDMlsCnkw0kexs3Q1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbn2ruA%2FbtsKl8kZQXe%2FkPEluLDMlsCnkw0kexs3Q1%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;1192&quot; height=&quot;845&quot; data-filename=&quot;스크린샷 2024-10-26 오후 9.35.47.png&quot; data-origin-width=&quot;1192&quot; data-origin-height=&quot;845&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;XDP&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Cilium에서 XDP를 활용하기 위해서는 NIC (Network Interface Controller) 혹은 ENI (Elastic Network Interface, AWS)에서 XDP처리를 지원해야 합니다.&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;aws ec2 에서 xdp 지원여부 확인하기&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;터미널 내에서 xdp를 지원하는 nic인지 확인하기 위해서는 ethtool을 사용하여 확인할 수 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;먼저 ifconfig 명령어로 네트워크 인터페이스를 확인해야합니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2024-10-26 오후 10.04.59.png&quot; data-origin-width=&quot;1192&quot; data-origin-height=&quot;845&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bdniGX/btsKksE3HZU/kSq402K7nKzWwSIdzKKAKk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bdniGX/btsKksE3HZU/kSq402K7nKzWwSIdzKKAKk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bdniGX/btsKksE3HZU/kSq402K7nKzWwSIdzKKAKk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbdniGX%2FbtsKksE3HZU%2FkSq402K7nKzWwSIdzKKAKk%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;1192&quot; height=&quot;845&quot; data-filename=&quot;스크린샷 2024-10-26 오후 10.04.59.png&quot; data-origin-width=&quot;1192&quot; data-origin-height=&quot;845&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이후 ethtool 명령어로 네트워크 인터페이스 정보를 조회합니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2024-10-26 오후 10.03.34.png&quot; data-origin-width=&quot;1192&quot; data-origin-height=&quot;845&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bGYjWE/btsKkaLHljW/2eVjvjguuZY3g3KTyZohB1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bGYjWE/btsKkaLHljW/2eVjvjguuZY3g3KTyZohB1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bGYjWE/btsKkaLHljW/2eVjvjguuZY3g3KTyZohB1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbGYjWE%2FbtsKkaLHljW%2F2eVjvjguuZY3g3KTyZohB1%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;1192&quot; height=&quot;845&quot; data-filename=&quot;스크린샷 2024-10-26 오후 10.03.34.png&quot; data-origin-width=&quot;1192&quot; data-origin-height=&quot;845&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;AWS에서 향상된 네트워킹 기능 활성화하는 가이드 문서&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://docs.aws.amazon.com/ko_kr/AWSEC2/latest/UserGuide/enhanced-networking-ena.html#enabling_enhanced_networking&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://docs.aws.amazon.com/ko_kr/AWSEC2/latest/UserGuide/enhanced-networking-ena.html#enabling_enhanced_networking&lt;/a&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;ENA 활성화 여부 확인하기&lt;/p&gt;
&lt;pre id=&quot;code_1729948572002&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;# ubuntu
apt upgrade
apt install -y -q awscli 



# ena 지원하는 인스턴스 여부 확인
AMI_ID=$(curl 169.254.169.254/latest/meta-data/ami-id)
aws ec2 describe-images --image-id $AMI_ID --query &quot;Images[].EnaSupport&quot;

# nic driver 확인
ethtool -i ens5&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;AWS EC2 인스턴스에 장착된 네트워크 인터페이스는 3종류입니다. (ENI, ENA, EFA) 기본적으로는 ENI가 장착되어있고 성능은 ENI &amp;lt; ENA &amp;lt; EFA 순으로 좋습니다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;aws에서 xdp를 지원하기 시작한 시점은 2020년 1월로 보입니다.&amp;nbsp; ena driver 2.2.0 부터 지원하는 것으로 확인됩니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;975&quot; data-origin-height=&quot;219&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bwgE62/btsKlPF4rcQ/KqRgEyYx8YkV1twiKav1Zk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bwgE62/btsKlPF4rcQ/KqRgEyYx8YkV1twiKav1Zk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bwgE62/btsKlPF4rcQ/KqRgEyYx8YkV1twiKav1Zk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbwgE62%2FbtsKlPF4rcQ%2FKqRgEyYx8YkV1twiKav1Zk%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;975&quot; height=&quot;219&quot; data-origin-width=&quot;975&quot; data-origin-height=&quot;219&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://github.com/amzn/amzn-drivers/issues/8&quot;&gt;https://github.com/amzn/amzn-drivers/issues/8&lt;/a&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;918&quot; data-origin-height=&quot;452&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/lnRWk/btsKmh3aW27/tzOXu8FsR9im0w71TZc2uk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/lnRWk/btsKmh3aW27/tzOXu8FsR9im0w71TZc2uk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/lnRWk/btsKmh3aW27/tzOXu8FsR9im0w71TZc2uk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FlnRWk%2FbtsKmh3aW27%2FtzOXu8FsR9im0w71TZc2uk%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;918&quot; height=&quot;452&quot; data-origin-width=&quot;918&quot; data-origin-height=&quot;452&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&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 data-ke-size=&quot;size16&quot;&gt;XDP 사용을 위해 ENA이상의 네트워크 어댑터를 지원하는 인스턴스를 활용하면 될 것으로 보입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;AWS Nitro network system에 구축된 인스턴스는 모두 ENA를 지원한다고 합니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2024-10-26 오후 10.21.30.png&quot; data-origin-width=&quot;1024&quot; data-origin-height=&quot;491&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cJqyS0/btsKlYit6Iy/5LKlmeWhgoWsi6dnAVPtD0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cJqyS0/btsKlYit6Iy/5LKlmeWhgoWsi6dnAVPtD0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cJqyS0/btsKlYit6Iy/5LKlmeWhgoWsi6dnAVPtD0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcJqyS0%2FbtsKlYit6Iy%2F5LKlmeWhgoWsi6dnAVPtD0%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;491&quot; data-filename=&quot;스크린샷 2024-10-26 오후 10.21.30.png&quot; data-origin-width=&quot;1024&quot; data-origin-height=&quot;491&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;Nitro System에 포함된 인스턴스 목록&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://docs.aws.amazon.com/ko_kr/ec2/latest/instancetypes/ec2-nitro-instances.html#nitro-instance-types&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://docs.aws.amazon.com/ko_kr/ec2/latest/instancetypes/ec2-nitro-instances.html#nitro-instance-types&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1729949030266&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;AWS Nitro 시스템에 구축된 인스턴스 - Amazon EC2&quot; data-og-description=&quot;ENA FreeBSD v2.3.1 이전의 드라이버 버전은 지원되지 않으므로 탄력적 네트워크 인터페이스 연결 실패가 발생합니다.&quot; data-og-host=&quot;docs.aws.amazon.com&quot; data-og-source-url=&quot;https://docs.aws.amazon.com/ko_kr/ec2/latest/instancetypes/ec2-nitro-instances.html#nitro-instance-types&quot; data-og-url=&quot;https://docs.aws.amazon.com/ko_kr/ec2/latest/instancetypes/ec2-nitro-instances.html#nitro-instance-types&quot; data-og-image=&quot;&quot;&gt;&lt;a href=&quot;https://docs.aws.amazon.com/ko_kr/ec2/latest/instancetypes/ec2-nitro-instances.html#nitro-instance-types&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://docs.aws.amazon.com/ko_kr/ec2/latest/instancetypes/ec2-nitro-instances.html#nitro-instance-types&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url();&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;AWS Nitro 시스템에 구축된 인스턴스 - Amazon EC2&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;ENA FreeBSD v2.3.1 이전의 드라이버 버전은 지원되지 않으므로 탄력적 네트워크 인터페이스 연결 실패가 발생합니다.&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;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 id=&quot;Nitro_System_support_for_previous_generation&quot; style=&quot;color: #232f3e; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;Nitro System의 이전 세대 지원&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://aws.amazon.com/ko/ec2/faqs/#Nitro_System_Support_for_Previous_Generation&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://aws.amazon.com/ko/ec2/faqs/#Nitro_System_Support_for_Previous_Generation&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1729948993567&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;company&quot; data-og-title=&quot;Amazon EC2 FAQ - AWS&quot; data-og-description=&quot;&quot; data-og-host=&quot;aws.amazon.com&quot; data-og-source-url=&quot;https://aws.amazon.com/ko/ec2/faqs/#Nitro_System_Support_for_Previous_Generation&quot; data-og-url=&quot;https://aws.amazon.com/ko/ec2/faqs/&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/N0E7K/hyXprdPWIb/iLWdHwakRWPhW9gufJHRk1/img.png?width=1200&amp;amp;height=630&amp;amp;face=0_0_1200_630,https://scrap.kakaocdn.net/dn/b0NqQx/hyXlL56cmg/ptqYSnaqFoJnAOzZ3K3bpk/img.png?width=179&amp;amp;height=109&amp;amp;face=0_0_179_109&quot;&gt;&lt;a href=&quot;https://aws.amazon.com/ko/ec2/faqs/#Nitro_System_Support_for_Previous_Generation&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://aws.amazon.com/ko/ec2/faqs/#Nitro_System_Support_for_Previous_Generation&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/N0E7K/hyXprdPWIb/iLWdHwakRWPhW9gufJHRk1/img.png?width=1200&amp;amp;height=630&amp;amp;face=0_0_1200_630,https://scrap.kakaocdn.net/dn/b0NqQx/hyXlL56cmg/ptqYSnaqFoJnAOzZ3K3bpk/img.png?width=179&amp;amp;height=109&amp;amp;face=0_0_179_109');&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 EC2 FAQ - AWS&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;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;h2 data-ke-size=&quot;size26&quot;&gt;회고&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;스터디가 마친 뒤에는 온프레미스 클러스터를 Cilium 으로 구성하여 다양한 작업을 진행해보고 싶어졌습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;혼자 공부하기에 어려웠던 네트워킹 지식을 가시다님 스터디를 통해서 시간 절약을 많이 했습니다. 모든 내용을 이해하진 못했지만 필요한 내용을 찾아서 공부할 정도는 되었다고 생각하여 알차게 복습 또 복습하고자 합니다.&lt;/p&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;</description>
      <category>스터디</category>
      <author>엔지니어-여리</author>
      <guid isPermaLink="true">https://yeoli-tech.tistory.com/51</guid>
      <comments>https://yeoli-tech.tistory.com/51#entry51comment</comments>
      <pubDate>Sat, 26 Oct 2024 22:24:20 +0900</pubDate>
    </item>
    <item>
      <title>[KANS 3기] 7주차 Service Mesh - Istio</title>
      <link>https://yeoli-tech.tistory.com/50</link>
      <description>&lt;h2 data-ke-size=&quot;size26&quot;&gt;실습환경 구성&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;실습 template&lt;/p&gt;
&lt;pre id=&quot;code_1729004488859&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;https://s3.ap-northeast-2.amazonaws.com/cloudformation.cloudneta.net/kans/kans-7w.yaml&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;위 url을 cloudformation stack 으로 실행합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;stack name, keyName 등을 적절히 선택해줍니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1237&quot; data-origin-height=&quot;1453&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/tAkMi/btsJ6f7aOEi/BvX9iCHcQr10rK75QJ4i40/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/tAkMi/btsJ6f7aOEi/BvX9iCHcQr10rK75QJ4i40/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/tAkMi/btsJ6f7aOEi/BvX9iCHcQr10rK75QJ4i40/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FtAkMi%2FbtsJ6f7aOEi%2FBvX9iCHcQr10rK75QJ4i40%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;1237&quot; height=&quot;1453&quot; data-origin-width=&quot;1237&quot; data-origin-height=&quot;1453&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;cloudformation에서 생성된 리소스는 다음과 같이 확인이 가능합니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2024-10-16 오전 12.21.30.png&quot; data-origin-width=&quot;1672&quot; data-origin-height=&quot;1453&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/s9NUI/btsJ8nCp9Gq/oQ6Vn9E4PFeBCOZIhDAIg1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/s9NUI/btsJ8nCp9Gq/oQ6Vn9E4PFeBCOZIhDAIg1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/s9NUI/btsJ8nCp9Gq/oQ6Vn9E4PFeBCOZIhDAIg1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fs9NUI%2FbtsJ8nCp9Gq%2FoQ6Vn9E4PFeBCOZIhDAIg1%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;1672&quot; height=&quot;1453&quot; data-filename=&quot;스크린샷 2024-10-16 오전 12.21.30.png&quot; data-origin-width=&quot;1672&quot; data-origin-height=&quot;1453&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;Istio 소개&lt;/h2&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;개요&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;MSA 환경에서 시스템 전체의 모니터링의 어려움과 운영 중 장애 발생시 원인과 문제점을 찾기가 어려워졌습니다. 이를 해결하기 위해 네트워크 통신의 안정성과 보안, o11y 등의 요구사항이 증가하였습니다. 이런 문제점들의 해결책으로 서비스메시가 등장하였습니다. istio는 서비스메시의 구현체중 하나로 데이터 플레인과 컨트롤 플레인이 존재합니다.&amp;nbsp; 데이터플레인은 envoy proxy를 사이드카로 활용하고, 컨트롤 플레인은 이러한 envoy proxy를 관리하고 구성합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;istio는 2가지 모드를 제공하고 2가지 모드에 대해서 설명하겠지만 sidecar pattern에 대해서 더 자세히 다룰 예정입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;구성&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;istio는 control plane과 data plane이라는 영역으로 논리적으로 나뉩니다.&amp;nbsp; data plane은 sidecar 형태로 배포된 일종의 지능형 proxy 입니다. 이러한 프록시는 microservice 사이의 모든 네트워크 통신을 중개하고 제어합니다. 또한 모든 메시 트래픽에 대한 원격 분석을 수집(collect)하고 보고(report) 합니다. control plane은 트래픽 라우팅을 위해 프록시를 관리하고 구성합니다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;istio는 각 pod 내에 sidecar 혀앹로 envoy proxy가 포함된 형태&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;Control Plane&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1.5 버전 이전에는 Pilot, Citadel, Galley, Mixer 4가지 구성을 포함했습니다. 1.5 버전 이후에는 Mixer를 제외한 3가지 구성요소를 &lt;span style=&quot;color: #ee2323;&quot;&gt;istiod라는 단일 구성으로 통합&lt;/span&gt;되었습니다.&amp;nbsp;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;Pilot: envoy sidecar에서 proxy routing rule을 관리, service discovery, load balancing&amp;nbsp; 설정을 제공합니다.&amp;nbsp;&lt;/li&gt;
&lt;li&gt; Citadel: 보안 기능을 담당하며 TLS 인증서 발급 및 관리를 통해 서비스간 통신 암호화를 수행합니다.&lt;/li&gt;
&lt;li&gt;Gally: istio와 쿠버네티스를 연결해주는 역할을 합니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;267&quot; data-origin-height=&quot;150&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bF3Xt7/btsKcW6qF3x/u4OK3SeCQfsXuQtKbcg50k/tfile.svg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bF3Xt7/btsKcW6qF3x/u4OK3SeCQfsXuQtKbcg50k/tfile.svg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bF3Xt7/btsKcW6qF3x/u4OK3SeCQfsXuQtKbcg50k/tfile.svg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbF3Xt7%2FbtsKcW6qF3x%2Fu4OK3SeCQfsXuQtKbcg50k%2Ftfile.svg&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;860&quot; height=&quot;483&quot; data-origin-width=&quot;267&quot; data-origin-height=&quot;150&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;Data Plane&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;istio는 확장된 버전의 envoy proxy를 사용합니다. 엔보이는 모든 인바운드 아웃바운드 트래픽을 중 개(mediate)하기위해서 c++로 개발된 고성능 프록시입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;envoy 가 하는일&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;Dynamic service discovery&lt;/li&gt;
&lt;li&gt;로드밸런싱&lt;/li&gt;
&lt;li&gt;TLS 종료&lt;/li&gt;
&lt;li&gt;HTTP/2 and gRPC proxies&lt;/li&gt;
&lt;li&gt;서킷 브레이커&lt;/li&gt;
&lt;li&gt;헬스체크&lt;/li&gt;
&lt;li&gt;Staged rollouts with %-based traffic split&lt;/li&gt;
&lt;li&gt;Fault injection&lt;/li&gt;
&lt;li&gt;Rich metrics&lt;/li&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;&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&gt;사이드카 배포를 통해 원격 분석, 모니터링시스템 전송을 활용하여 전체 메시 동작 정보를 제공할 수 있습니다.&lt;/li&gt;
&lt;li&gt;코드 재설계 없이 기존 배포에 istio 기능을 추가할 수 있습니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;Envoy&lt;/h2&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;개요&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Envoy는 대규모 최신 서비스 지향 아키텍처를 위해 설계된 L7 프록시 및 통신 버스입니다. envoy는 '&lt;span style=&quot;background-color: #ffffff; color: #242b34; text-align: start;&quot;&gt;네트워크는 애플리케이션에 투명해야 한다'는 신념 아래에 탄생하였습니다. 결국 네트워크와 애플리케이션의 문제가 발생했을 때 문제 원인을 쉽게 파악하기 위한 목적으로 탄생한 것입니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #242b34; text-align: start;&quot;&gt;envoy에서 사용되는 몇가지 단어가 있습니다. &lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #242b34; text-align: start;&quot;&gt;Host: 네트워크 통신이 가능한 entity를 말합니다. logical network application을 뜻합니다. &lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #242b34; text-align: start;&quot;&gt;Downstream: downstream host는 envoy에 요청을 전달하고, 응답을 받습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #242b34; text-align: start;&quot;&gt;Upstream: Upstream host는 envoy로부터 요청을 전달받고 응답을 반환합니다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #242b34; text-align: start;&quot;&gt;Listener: downstream client에 의해 연결된 포트, 유닉스 도메인 소켓과 같은 네트워크 영역을 말합니다. envoy는 downstream host가 연결할 수 있는 1개 이상의 listener를 노출합니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span data-token-index=&quot;0&quot;&gt;Cluster&lt;/span&gt;: envoy 가 트래픽을 포워드할 수 있는 논리적인 서비스 (엔드포인트 세트), 실제 요청이 처리되는 IP 또는 엔드포인트의 묶음을 의미합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #242b34; text-align: start;&quot;&gt;요청 흐름도.&lt;/span&gt;&lt;/h3&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;693&quot; data-origin-height=&quot;342&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/b4OC2k/btsKddGPeyr/PhHCYFr8EV2ckfZdANEZZK/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/b4OC2k/btsKddGPeyr/PhHCYFr8EV2ckfZdANEZZK/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/b4OC2k/btsKddGPeyr/PhHCYFr8EV2ckfZdANEZZK/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fb4OC2k%2FbtsKddGPeyr%2FPhHCYFr8EV2ckfZdANEZZK%2Fimg.jpg&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;860&quot; height=&quot;424&quot; data-origin-width=&quot;693&quot; data-origin-height=&quot;342&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #242b34; text-align: start;&quot;&gt;&lt;a href=&quot;https://www.envoyproxy.io/docs/envoy/latest/intro/life_of_a_request#high-level-architecture&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;출처: https://www.envoyproxy.io/docs/envoy/latest/intro/life_of_a_request#high-level-architecture&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;SideCar 모드&lt;/h2&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;설치&lt;/h3&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;istioctl 설치 및 실습 설정&lt;/h4&gt;
&lt;pre id=&quot;code_1729321943770&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;export ISTIOV=1.23.2
echo &quot;export ISTIOV=1.23.2&quot; &amp;gt;&amp;gt; /etc/profile
curl -s -L https://istio.io/downloadIstio | ISTIO_VERSION=$ISTIOV TARGET_ARCH=x86_64 sh -
tree istio-$ISTIOV -L 2 # sample yaml 포함
cp istio-$ISTIOV/bin/istioctl /usr/local/bin/istioctl
istioctl version --remote=false&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2024-10-19 오후 4.14.13.png&quot; data-origin-width=&quot;1037&quot; data-origin-height=&quot;705&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/DeiwK/btsKcOOkxHy/7YI1P24BKCMm9cGEttFNfk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/DeiwK/btsKcOOkxHy/7YI1P24BKCMm9cGEttFNfk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/DeiwK/btsKcOOkxHy/7YI1P24BKCMm9cGEttFNfk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FDeiwK%2FbtsKcOOkxHy%2F7YI1P24BKCMm9cGEttFNfk%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;1037&quot; height=&quot;705&quot; data-filename=&quot;스크린샷 2024-10-19 오후 4.14.13.png&quot; data-origin-width=&quot;1037&quot; data-origin-height=&quot;705&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;먼저, 실습환경 구성때만든 k3s-s 서버에 ssh를 통해서 접속합니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2024-10-19 오후 4.14.37.png&quot; data-origin-width=&quot;1037&quot; data-origin-height=&quot;705&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/HNR4i/btsKcRD7OUV/GHwawlkFKe1sXVvhys1oj0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/HNR4i/btsKcRD7OUV/GHwawlkFKe1sXVvhys1oj0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/HNR4i/btsKcRD7OUV/GHwawlkFKe1sXVvhys1oj0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FHNR4i%2FbtsKcRD7OUV%2FGHwawlkFKe1sXVvhys1oj0%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;1037&quot; height=&quot;705&quot; data-filename=&quot;스크린샷 2024-10-19 오후 4.14.37.png&quot; data-origin-width=&quot;1037&quot; data-origin-height=&quot;705&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;istioctl 설치 코드블록을 복사 및 적용하여 istioctl을 설치합니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2024-10-19 오후 4.15.02.png&quot; data-origin-width=&quot;1037&quot; data-origin-height=&quot;705&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bJenio/btsKc0Ok79k/k4EYJdI5u4cd3Dt5AYb1Ak/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bJenio/btsKc0Ok79k/k4EYJdI5u4cd3Dt5AYb1Ak/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bJenio/btsKc0Ok79k/k4EYJdI5u4cd3Dt5AYb1Ak/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbJenio%2FbtsKc0Ok79k%2Fk4EYJdI5u4cd3Dt5AYb1Ak%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;1037&quot; height=&quot;705&quot; data-filename=&quot;스크린샷 2024-10-19 오후 4.15.02.png&quot; data-origin-width=&quot;1037&quot; data-origin-height=&quot;705&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;현재 설치된 istioctl profile을 조회합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2024-10-19 오후 4.15.40.png&quot; data-origin-width=&quot;1037&quot; data-origin-height=&quot;705&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bcDIV2/btsKbgSSGxU/XZCiZQW7xrakMI6wunXKkK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bcDIV2/btsKbgSSGxU/XZCiZQW7xrakMI6wunXKkK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bcDIV2/btsKbgSSGxU/XZCiZQW7xrakMI6wunXKkK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbcDIV2%2FbtsKbgSSGxU%2FXZCiZQW7xrakMI6wunXKkK%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;1037&quot; height=&quot;705&quot; data-filename=&quot;스크린샷 2024-10-19 오후 4.15.40.png&quot; data-origin-width=&quot;1037&quot; data-origin-height=&quot;705&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;우리는 이중 demo profile을 활용합니다. 설정을 조금 변경하도록 하겠습니다.&lt;/p&gt;
&lt;pre id=&quot;code_1729322493790&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;istioctl profile dump demo &amp;gt; demo-profile.yaml&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;명령을 통해, profile을 dump 해줍니다. 여기서 egressGateways를 비활성화로 변경합니다.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2024-10-19 오후 4.16.10.png&quot; data-origin-width=&quot;1037&quot; data-origin-height=&quot;705&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/ctHUNX/btsKcdOd90N/9XEtesbClyRKKqTkP9hWcK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/ctHUNX/btsKcdOd90N/9XEtesbClyRKKqTkP9hWcK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/ctHUNX/btsKcdOd90N/9XEtesbClyRKKqTkP9hWcK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FctHUNX%2FbtsKcdOd90N%2F9XEtesbClyRKKqTkP9hWcK%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;1037&quot; height=&quot;705&quot; data-filename=&quot;스크린샷 2024-10-19 오후 4.16.10.png&quot; data-origin-width=&quot;1037&quot; data-origin-height=&quot;705&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2024-10-19 오후 4.17.53.png&quot; data-origin-width=&quot;1037&quot; data-origin-height=&quot;705&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/b8btn8/btsKdnvOs2E/uhK1DShNPvD5SEXixMrDlK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/b8btn8/btsKdnvOs2E/uhK1DShNPvD5SEXixMrDlK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/b8btn8/btsKdnvOs2E/uhK1DShNPvD5SEXixMrDlK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fb8btn8%2FbtsKdnvOs2E%2FuhK1DShNPvD5SEXixMrDlK%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;1037&quot; height=&quot;705&quot; data-filename=&quot;스크린샷 2024-10-19 오후 4.17.53.png&quot; data-origin-width=&quot;1037&quot; data-origin-height=&quot;705&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;istioctl install 명령을 사용하여 변경된 demo profile을 적용해줍니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;ingressgateway 살펴보기&lt;/h4&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2024-10-19 오후 4.23.09.png&quot; data-origin-width=&quot;1037&quot; data-origin-height=&quot;789&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/zXrQN/btsKdxE5fWt/XJIdkaAdq2CTl2OJec4CwK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/zXrQN/btsKdxE5fWt/XJIdkaAdq2CTl2OJec4CwK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/zXrQN/btsKdxE5fWt/XJIdkaAdq2CTl2OJec4CwK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FzXrQN%2FbtsKdxE5fWt%2FXJIdkaAdq2CTl2OJec4CwK%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;1037&quot; height=&quot;789&quot; data-filename=&quot;스크린샷 2024-10-19 오후 4.23.09.png&quot; data-origin-width=&quot;1037&quot; data-origin-height=&quot;789&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;적용이 잘 되었는지 확인합니다.&lt;/p&gt;
&lt;pre id=&quot;code_1729322618305&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt; kubectl get all,svc,ep,sa,cm,secret,pdb -n istio-system&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;svc: service&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;ep: endpoint&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;sa: service account&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;cm: configmap&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;pdb: pod disruption budget&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2024-10-19 오후 4.25.06.png&quot; data-origin-width=&quot;1037&quot; data-origin-height=&quot;789&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/MO64S/btsKdoO0bHe/rUnMAhgxnZwX8MKau2iXO0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/MO64S/btsKdoO0bHe/rUnMAhgxnZwX8MKau2iXO0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/MO64S/btsKdoO0bHe/rUnMAhgxnZwX8MKau2iXO0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FMO64S%2FbtsKdoO0bHe%2FrUnMAhgxnZwX8MKau2iXO0%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;1037&quot; height=&quot;789&quot; data-filename=&quot;스크린샷 2024-10-19 오후 4.25.06.png&quot; data-origin-width=&quot;1037&quot; data-origin-height=&quot;789&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;pre id=&quot;code_1729322724287&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt; kubectl patch svc -n istio-system istio-ingressgateway -p '{&quot;spec&quot;:{&quot;type&quot;:&quot;NodePort&quot;}}'&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;istio-ingressgateway 서비스의 서비스타입이 LoadBalancer 입니다. 이를 NodePort로 변경해줍니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이때 istio-ingressgateway pod는 여러 포트를 노출하고 있습니다.&lt;/p&gt;
&lt;pre id=&quot;code_1729323174604&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;kubectl get service -n istio-system istio-ingressgateway -o jsonpath='{.spec.ports}' | jq&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2024-10-19 오후 4.32.34.png&quot; data-origin-width=&quot;1037&quot; data-origin-height=&quot;812&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/b0g1iq/btsKb8l8VbS/kbZcocqmjzLGh1KFlTIkR1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/b0g1iq/btsKb8l8VbS/kbZcocqmjzLGh1KFlTIkR1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/b0g1iq/btsKb8l8VbS/kbZcocqmjzLGh1KFlTIkR1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fb0g1iq%2FbtsKb8l8VbS%2FkbZcocqmjzLGh1KFlTIkR1%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;1037&quot; height=&quot;812&quot; data-filename=&quot;스크린샷 2024-10-19 오후 4.32.34.png&quot; data-origin-width=&quot;1037&quot; data-origin-height=&quot;812&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;각각의 포트는 위 명령어를 통해 확인할 수 있습니다. 15021 포트는 health check목적으로 사용됩니다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그밖에 사용되는 port는 istio 공식 문서를 참조할 수 있습니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2024-10-19 오후 4.33.32.png&quot; data-origin-width=&quot;930&quot; data-origin-height=&quot;692&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cj1QEi/btsKdtWZKHk/YF1KVnCXbZVXTwQWnNhi50/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cj1QEi/btsKdtWZKHk/YF1KVnCXbZVXTwQWnNhi50/img.png&quot; data-alt=&quot;https://istio.io/latest/docs/ops/deployment/application-requirements/&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cj1QEi/btsKdtWZKHk/YF1KVnCXbZVXTwQWnNhi50/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fcj1QEi%2FbtsKdtWZKHk%2FYF1KVnCXbZVXTwQWnNhi50%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;930&quot; height=&quot;692&quot; data-filename=&quot;스크린샷 2024-10-19 오후 4.33.32.png&quot; data-origin-width=&quot;930&quot; data-origin-height=&quot;692&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;https://istio.io/latest/docs/ops/deployment/application-requirements/&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;istio 외부 노출&lt;/h3&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;설정&lt;/h4&gt;
&lt;pre id=&quot;code_1729324263489&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;# port 설정
export IGWHTTP=$(kubectl get service -n istio-system istio-ingressgateway -o jsonpath='{.spec.ports[1].nodePort}')

# /etc/hosts 파일 수정
MYDOMAIN=www.yeoli.io
echo &quot;192.168.10.10 $MYDOMAIN&quot; &amp;gt;&amp;gt; /etc/hosts
echo -e &quot;export MYDOMAIN=$MYDOMAIN&quot; &amp;gt;&amp;gt; /etc/profile

# istio ingress gw 접속 테스트 : 아직은 설정이 없어서 접속 실패가 된다
curl -v -s $MYDOMAIN:$IGWHTTP

### istio sidecar injection practice ###

# istio의 injection을 허용하는 네임스페이스를 설정합니다.
kubectl label namespace default istio-injection=enabled

# istio 네임스페이스의 로그를 모니터링합니다.
kubetail -n istio-system -l app=istiod -f

# nginx pod를 생성합니다.
cat &amp;lt;&amp;lt;EOF | kubectl create -f -
apiVersion: v1
kind: ServiceAccount
metadata:
  name: kans-nginx
---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: deploy-websrv
spec:
  replicas: 1
  selector:
    matchLabels:
      app: deploy-websrv
  template:
    metadata:
      labels:
        app: deploy-websrv
    spec:
      serviceAccountName: kans-nginx
      terminationGracePeriodSeconds: 0
      containers:
      - name: deploy-websrv
        image: nginx:alpine
        ports:
        - containerPort: 80
---
apiVersion: v1
kind: Service
metadata:
  name: svc-clusterip
spec:
  ports:
    - name: svc-webport
      port: 80
      targetPort: 80
  selector:
    app: deploy-websrv
  type: ClusterIP
EOF&lt;/code&gt;&lt;/pre&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;h3 data-ke-size=&quot;size23&quot;&gt;Nginx 파드 구성&lt;/h3&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2024-10-19 오후 5.28.50.png&quot; data-origin-width=&quot;1631&quot; data-origin-height=&quot;812&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bhgohJ/btsKb1HsgQN/OCr0sQ9hvPKKNKk4UlGlSK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bhgohJ/btsKb1HsgQN/OCr0sQ9hvPKKNKk4UlGlSK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bhgohJ/btsKb1HsgQN/OCr0sQ9hvPKKNKk4UlGlSK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbhgohJ%2FbtsKb1HsgQN%2FOCr0sQ9hvPKKNKk4UlGlSK%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;1631&quot; height=&quot;812&quot; data-filename=&quot;스크린샷 2024-10-19 오후 5.28.50.png&quot; data-origin-width=&quot;1631&quot; data-origin-height=&quot;812&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;설정 에서 istio sidecar injection practice 항목을 따라해보겠습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;우측에서는 istio-system을 모니터링하고, 좌측에서는 nginx 파드를 생성합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2024-10-19 오후 5.33.58.png&quot; data-origin-width=&quot;1631&quot; data-origin-height=&quot;812&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/kwSaU/btsKbLLBiaM/oggowKj1Pe8zYM4kUkoZnK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/kwSaU/btsKbLLBiaM/oggowKj1Pe8zYM4kUkoZnK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/kwSaU/btsKbLLBiaM/oggowKj1Pe8zYM4kUkoZnK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FkwSaU%2FbtsKbLLBiaM%2FoggowKj1Pe8zYM4kUkoZnK%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;1631&quot; height=&quot;812&quot; data-filename=&quot;스크린샷 2024-10-19 오후 5.33.58.png&quot; data-origin-width=&quot;1631&quot; data-origin-height=&quot;812&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2024-10-19 오후 5.30.07.png&quot; data-origin-width=&quot;1631&quot; data-origin-height=&quot;812&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bazeEz/btsKbJfYuFt/pXbPzqQwla5epIvJVG3YG0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bazeEz/btsKbJfYuFt/pXbPzqQwla5epIvJVG3YG0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bazeEz/btsKbJfYuFt/pXbPzqQwla5epIvJVG3YG0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbazeEz%2FbtsKbJfYuFt%2FpXbPzqQwla5epIvJVG3YG0%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;1631&quot; height=&quot;812&quot; data-filename=&quot;스크린샷 2024-10-19 오후 5.30.07.png&quot; data-origin-width=&quot;1631&quot; data-origin-height=&quot;812&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2024-10-19 오후 5.29.28.png&quot; data-origin-width=&quot;1631&quot; data-origin-height=&quot;812&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/d3Aaht/btsKdx6byL1/18ykGbNjpofXXynLe9kOwk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/d3Aaht/btsKdx6byL1/18ykGbNjpofXXynLe9kOwk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/d3Aaht/btsKdx6byL1/18ykGbNjpofXXynLe9kOwk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fd3Aaht%2FbtsKdx6byL1%2F18ykGbNjpofXXynLe9kOwk%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;1631&quot; height=&quot;812&quot; data-filename=&quot;스크린샷 2024-10-19 오후 5.29.28.png&quot; data-origin-width=&quot;1631&quot; data-origin-height=&quot;812&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;파드가 생성되면서 sidecar injection이 발생하였습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;kubectl get pod 명령어로 파드를 조회해보면, 파드 내 컨테이너가 1이 아닌 2인 것을 확인할 수 있습니다. 이를 좀 더 살펴보면,&amp;nbsp;pod 내 정보에서는 init-proxy라는 컨테이너가 함께 구성되는 것을 알 수 있습니다. sidecar injection 형태로 istio의 컨테이너가 생성된 것을 알 수 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;Gateway/Virtual Service 구성&lt;/h3&gt;
&lt;pre id=&quot;code_1729330844928&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;cat &amp;lt;&amp;lt;EOF | kubectl create -f -
apiVersion: networking.istio.io/v1
kind: Gateway
metadata:
  name: test-gateway
spec:
  selector:
    istio: ingressgateway
  servers:
  - port:
      number: 80
      name: http
      protocol: HTTP
    hosts:
    - &quot;*&quot;
---
apiVersion: networking.istio.io/v1
kind: VirtualService
metadata:
  name: nginx-service
spec:
  hosts:
  - &quot;$MYDOMAIN&quot;
  gateways:
  - test-gateway
  http:
  - route:
    - destination:
        host: svc-clusterip
        port:
          number: 80
EOF&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;위 manifest를 실행시켜 gateway, virtual service를 생성해줍니다.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2024-10-19 오후 6.40.20.png&quot; data-origin-width=&quot;1631&quot; data-origin-height=&quot;812&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dpy3yp/btsKbgyx08d/3Me0ZYErQJuLtMmTtbkZi1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dpy3yp/btsKbgyx08d/3Me0ZYErQJuLtMmTtbkZi1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dpy3yp/btsKbgyx08d/3Me0ZYErQJuLtMmTtbkZi1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fdpy3yp%2FbtsKbgyx08d%2F3Me0ZYErQJuLtMmTtbkZi1%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;1631&quot; height=&quot;812&quot; data-filename=&quot;스크린샷 2024-10-19 오후 6.40.20.png&quot; data-origin-width=&quot;1631&quot; data-origin-height=&quot;812&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2024-10-19 오후 6.40.27.png&quot; data-origin-width=&quot;1631&quot; data-origin-height=&quot;812&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cGgkxA/btsKbwBltwu/DbMoqENasOA7mAkVBQubv1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cGgkxA/btsKbwBltwu/DbMoqENasOA7mAkVBQubv1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cGgkxA/btsKbwBltwu/DbMoqENasOA7mAkVBQubv1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcGgkxA%2FbtsKbwBltwu%2FDbMoqENasOA7mAkVBQubv1%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;1631&quot; height=&quot;812&quot; data-filename=&quot;스크린샷 2024-10-19 오후 6.40.27.png&quot; data-origin-width=&quot;1631&quot; data-origin-height=&quot;812&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;생성된 gateway, virtual service는 다음과 같은 설정 정보를 포함하고 있습니다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1729330943574&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;# gateway, virtual service 조회
kubectl get gw,vs

# istio proxy status 조회
istioctl ps&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot; data-token-index=&quot;0&quot;&gt;&amp;nbsp;명령어를 사용하여 설정된 gateway, vs, proxy 상태를 조회합니다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2024-10-19 오후 6.41.51.png&quot; data-origin-width=&quot;1631&quot; data-origin-height=&quot;812&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cLe3At/btsKdEc19CY/ixjuAxMBKJJ7CSjq6szJK0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cLe3At/btsKdEc19CY/ixjuAxMBKJJ7CSjq6szJK0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cLe3At/btsKdEc19CY/ixjuAxMBKJJ7CSjq6szJK0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcLe3At%2FbtsKdEc19CY%2FixjuAxMBKJJ7CSjq6szJK0%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;1631&quot; height=&quot;812&quot; data-filename=&quot;스크린샷 2024-10-19 오후 6.41.51.png&quot; data-origin-width=&quot;1631&quot; data-origin-height=&quot;812&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&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;a href=&quot;http://www.yeoli.io&quot;&gt;www.yeoli.io&amp;nbsp;&lt;/a&gt; 라는 도메인으로 테스트를 할 준비가 되었습니다.&lt;/p&gt;
&lt;pre id=&quot;code_1729333364886&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;curl -s $MYDOMAIN:$IGWHTTP | grep -o &quot;&amp;lt;title&amp;gt;.*&amp;lt;/title&amp;gt;&quot;

# 결과
Welcome to nginx!&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;로그&lt;/h3&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&amp;nbsp;&lt;/h3&gt;
&lt;pre id=&quot;code_1729333644401&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;kubetail -n default
Will tail 3 logs...
deploy-websrv-7d7cf8586c-qspjs deploy-websrv
deploy-websrv-7d7cf8586c-qspjs istio-proxy
deploy-websrv-7d7cf8586c-qspjs istio-init



[deploy-websrv-7d7cf8586c-qspjs deploy-websrv] 127.0.0.6 - - [19/Oct/2024:10:18:59 +0000] &quot;GET / HTTP/1.1&quot; 200 615 &quot;-&quot; &quot;curl/8.10.1&quot; &quot;-&quot;
[deploy-websrv-7d7cf8586c-qspjs istio-proxy] [2024-10-19T10:18:59.053Z] &quot;GET / HTTP/1.1&quot; 200 - via_upstream - &quot;-&quot; 0 615 0 0 &quot;-&quot; &quot;curl/8.10.1&quot; &quot;5f7bee9b-d764-9e14-ad4a-a583233d16a8&quot; &quot;10.10.200.134&quot; &quot;172.16.2.8:80&quot; inbound|80|| 127.0.0.6:55867 172.16.2.8:80 172.16.2.8:53002 invalid:outbound_.80_._.svc-clusterip.default.svc.cluster.local default
[deploy-websrv-7d7cf8586c-qspjs istio-proxy] [2024-10-19T10:18:59.053Z] &quot;GET / HTTP/1.1&quot; 200 - via_upstream - &quot;-&quot; 0 615 1 0 &quot;-&quot; &quot;curl/8.10.1&quot; &quot;5f7bee9b-d764-9e14-ad4a-a583233d16a8&quot; &quot;10.10.200.134&quot; &quot;172.16.2.8:80&quot; outbound|80||svc-clusterip.default.svc.cluster.local 172.16.2.8:53002 10.10.200.134:80 172.16.2.8:50182 - default&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;출력 로그 이해하기&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;669&quot; data-origin-height=&quot;163&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/UHJuL/btsKc01W5oN/0dbz0SS6aZQ8fOX6YLk2I0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/UHJuL/btsKc01W5oN/0dbz0SS6aZQ8fOX6YLk2I0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/UHJuL/btsKc01W5oN/0dbz0SS6aZQ8fOX6YLk2I0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FUHJuL%2FbtsKc01W5oN%2F0dbz0SS6aZQ8fOX6YLk2I0%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;669&quot; height=&quot;163&quot; data-origin-width=&quot;669&quot; data-origin-height=&quot;163&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;출력로그는 위와같은 구조로 구성되어있습니다. 한 번 이해해두시면 로그분석이 필요할 때 손쉽게 사용할 수 있습니다.&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&amp;nbsp;&lt;/h3&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;모니터링&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이러한 복잡한 구조를 매번 확인할 때마다 로그를 보거나 routing rule, kubectl 등으로 확인하는 것은 매우 비효율적일 수 있습니다. 우리는 kiali를 활용하여 서비스 메시의 모니터링을 하고자 합니다.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2024-10-20 오전 1.18.32.png&quot; data-origin-width=&quot;797&quot; data-origin-height=&quot;705&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/byePF4/btsKb5iNtsV/KYOksr6UXNT7d2goiqbCX1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/byePF4/btsKb5iNtsV/KYOksr6UXNT7d2goiqbCX1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/byePF4/btsKb5iNtsV/KYOksr6UXNT7d2goiqbCX1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbyePF4%2FbtsKb5iNtsV%2FKYOksr6UXNT7d2goiqbCX1%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;797&quot; height=&quot;705&quot; data-filename=&quot;스크린샷 2024-10-20 오전 1.18.32.png&quot; data-origin-width=&quot;797&quot; data-origin-height=&quot;705&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;구성된 실습환경에서 해당 경로에 포함된 리소스를 모두 실행시켜보겠습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1729354750272&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;kubectl apply -f ~/istio-$ISTIOV/samples/addons # 디렉터리에 있는 모든 yaml 자원을 생성
kubectl rollout status deployment/kiali -n istio-system

# service type을 NodePort로 변경해줍니다.
kubectl patch svc -n istio-system kiali -p '{&quot;spec&quot;:{&quot;type&quot;:&quot;NodePort&quot;}}'

# grafana service 타입 변경: NodePort
kubectl patch svc -n istio-system grafana -p '{&quot;spec&quot;:{&quot;type&quot;:&quot;NodePort&quot;}}'

# prometheus service 타입 변경: NodePort
kubectl patch svc -n istio-system prometheus -p '{&quot;spec&quot;:{&quot;type&quot;:&quot;NodePort&quot;}}'


# kiali nodeport의 포트를 확인합니다.
KIALINodePort=$(kubectl get svc -n istio-system kiali -o jsonpath={.spec.ports[0].nodePort})



# 인터넷 브라우저를 통해 접속할 kiali url을 확인합니다.
echo -e &quot;KIALI UI URL = http://$(curl -s ipinfo.io/ip):$KIALINodePort&quot;


# grafana url도 확인할 수 있습니다.
GRAFANANodePort=$(kubectl get svc -n istio-system grafana -o jsonpath={.spec.ports[0].nodePort})
echo -e &quot;Grafana URL = http://$(curl -s ipinfo.io/ip):$GRAFANANodePort&quot;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2024-10-20 오전 1.21.31.png&quot; data-origin-width=&quot;797&quot; data-origin-height=&quot;728&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/3lKJb/btsKbKzeOPG/VUIrrY5rvdtqhIqVKnpwh0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/3lKJb/btsKbKzeOPG/VUIrrY5rvdtqhIqVKnpwh0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/3lKJb/btsKbKzeOPG/VUIrrY5rvdtqhIqVKnpwh0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F3lKJb%2FbtsKbKzeOPG%2FVUIrrY5rvdtqhIqVKnpwh0%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;797&quot; height=&quot;728&quot; data-filename=&quot;스크린샷 2024-10-20 오전 1.21.31.png&quot; data-origin-width=&quot;797&quot; data-origin-height=&quot;728&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&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 data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2024-10-20 오전 1.21.21.png&quot; data-origin-width=&quot;1832&quot; data-origin-height=&quot;1473&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/1QzAc/btsKbxAi1a2/lwQPdokX5vPKbiVKm0965K/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/1QzAc/btsKbxAi1a2/lwQPdokX5vPKbiVKm0965K/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/1QzAc/btsKbxAi1a2/lwQPdokX5vPKbiVKm0965K/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F1QzAc%2FbtsKbxAi1a2%2FlwQPdokX5vPKbiVKm0965K%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;1832&quot; height=&quot;1473&quot; data-filename=&quot;스크린샷 2024-10-20 오전 1.21.21.png&quot; data-origin-width=&quot;1832&quot; data-origin-height=&quot;1473&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;kiali의 대시보드 화면입니다. 이 화면에서는 service mesh, istio를 모니터링할 수 있습니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2024-10-20 오전 1.23.56.png&quot; data-origin-width=&quot;1832&quot; data-origin-height=&quot;1473&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/ByoPD/btsKdvHnAhr/o3rWRpm6NaRouSdsLgzbkk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/ByoPD/btsKdvHnAhr/o3rWRpm6NaRouSdsLgzbkk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/ByoPD/btsKdvHnAhr/o3rWRpm6NaRouSdsLgzbkk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FByoPD%2FbtsKdvHnAhr%2Fo3rWRpm6NaRouSdsLgzbkk%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;1832&quot; height=&quot;1473&quot; data-filename=&quot;스크린샷 2024-10-20 오전 1.23.56.png&quot; data-origin-width=&quot;1832&quot; data-origin-height=&quot;1473&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;kiali에서 일정 기간동안 트래픽 혹은 애플리케이션 정보, 워크로드, 서비스, 메시등의 정보를 모두 확인할 수 있습니다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;물론 prometheus에서도 수집되는 메트릭을 prometheus 서비스의 포트를 통해 브라우저에서 확인할 수 있습니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2024-10-20 오전 1.27.11.png&quot; data-origin-width=&quot;1832&quot; data-origin-height=&quot;1473&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/tqzym/btsKcaYuuSC/49JUxP7ZXzRZjIlWEKTzPk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/tqzym/btsKcaYuuSC/49JUxP7ZXzRZjIlWEKTzPk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/tqzym/btsKcaYuuSC/49JUxP7ZXzRZjIlWEKTzPk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Ftqzym%2FbtsKcaYuuSC%2F49JUxP7ZXzRZjIlWEKTzPk%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;1832&quot; height=&quot;1473&quot; data-filename=&quot;스크린샷 2024-10-20 오전 1.27.11.png&quot; data-origin-width=&quot;1832&quot; data-origin-height=&quot;1473&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;다만 istio, prometheus를 매번 각각의 콘솔에서 확인하는 건 불편합니다. 이를 해결하기 위해 grafana에서 prometheus, istio를 모두 확인할 수 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2024-10-20 오전 1.28.14.png&quot; data-origin-width=&quot;1832&quot; data-origin-height=&quot;1473&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/brE82g/btsKbeguVS8/KwvbXHBlr8IAR7I8vzops0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/brE82g/btsKbeguVS8/KwvbXHBlr8IAR7I8vzops0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/brE82g/btsKbeguVS8/KwvbXHBlr8IAR7I8vzops0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbrE82g%2FbtsKbeguVS8%2FKwvbXHBlr8IAR7I8vzops0%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;1832&quot; height=&quot;1473&quot; data-filename=&quot;스크린샷 2024-10-20 오전 1.28.14.png&quot; data-origin-width=&quot;1832&quot; data-origin-height=&quot;1473&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;grafana url에 접속하면, istio dashboard를 확인할 수 있습니다.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2024-10-20 오전 1.29.31.png&quot; data-origin-width=&quot;1832&quot; data-origin-height=&quot;1473&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/djsF0L/btsKb71UzB7/VyYQ0sf7rDedV1gJOrWwK1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/djsF0L/btsKb71UzB7/VyYQ0sf7rDedV1gJOrWwK1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/djsF0L/btsKb71UzB7/VyYQ0sf7rDedV1gJOrWwK1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdjsF0L%2FbtsKb71UzB7%2FVyYQ0sf7rDedV1gJOrWwK1%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;1832&quot; height=&quot;1473&quot; data-filename=&quot;스크린샷 2024-10-20 오전 1.29.31.png&quot; data-origin-width=&quot;1832&quot; data-origin-height=&quot;1473&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;istio control plane dashboard&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2024-10-20 오전 1.29.39.png&quot; data-origin-width=&quot;1832&quot; data-origin-height=&quot;1473&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cK4Lcn/btsKb8mfD3x/ztfBN6sOziaVPXUqSbdlc1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cK4Lcn/btsKb8mfD3x/ztfBN6sOziaVPXUqSbdlc1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cK4Lcn/btsKb8mfD3x/ztfBN6sOziaVPXUqSbdlc1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcK4Lcn%2FbtsKb8mfD3x%2FztfBN6sOziaVPXUqSbdlc1%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;1832&quot; height=&quot;1473&quot; data-filename=&quot;스크린샷 2024-10-20 오전 1.29.39.png&quot; data-origin-width=&quot;1832&quot; data-origin-height=&quot;1473&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;istio service dashboard 입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;여기까지 istio 모니터링에 대해 살펴보았습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;istio 트래픽 흐름&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;외부 클라이언트로부터 k8s 클러스터 내부의 application 파드로 전달되는 트래픽 흐름은 다음과 같습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1807&quot; data-origin-height=&quot;342&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/d3CoZr/btsKb6BV7Tx/LS0Qjqb7Tsc9tmjZWl6kmK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/d3CoZr/btsKb6BV7Tx/LS0Qjqb7Tsc9tmjZWl6kmK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/d3CoZr/btsKb6BV7Tx/LS0Qjqb7Tsc9tmjZWl6kmK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fd3CoZr%2FbtsKb6BV7Tx%2FLS0Qjqb7Tsc9tmjZWl6kmK%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;1807&quot; height=&quot;342&quot; data-origin-width=&quot;1807&quot; data-origin-height=&quot;342&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1. client 요청은 istio ingress gateway로 전달됩니다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2. istio ingress gateway로 전달된 요청은 cluster의 node로 전달되고 host namespace로 전달됩니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;3. host namespace에서 iptables 규칙에 따라 pod namespace로 전달 됩니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;4. pod namespace내의 iptables 규칙에 따라서 파드 내부의 istio-proxy로 먼저 전달이 됩니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;5. istio-proxy 컨테이너에서 istio의 iptables 규칙에 따라서 application 컨테이너로 요청이 전달됩니다.&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;Ambient mode&lt;/h2&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;개요&lt;/h3&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1410&quot; data-origin-height=&quot;692&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/nlAcR/btsKcX5qUuN/z5PiV8RJWzYXkiGvjZxBr0/img.webp&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/nlAcR/btsKcX5qUuN/z5PiV8RJWzYXkiGvjZxBr0/img.webp&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/nlAcR/btsKcX5qUuN/z5PiV8RJWzYXkiGvjZxBr0/img.webp&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FnlAcR%2FbtsKcX5qUuN%2Fz5PiV8RJWzYXkiGvjZxBr0%2Fimg.webp&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;1410&quot; height=&quot;692&quot; data-origin-width=&quot;1410&quot; data-origin-height=&quot;692&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;정환열님의 블로그중 발췌 (&lt;a href=&quot;https://www.anyflow.net/sw-engineer/istio-ambient-mode&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://www.anyflow.net/sw-engineer/istio-ambient-mode&lt;/a&gt;)&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;Ambient mode는 Sidecar mode 하의 Istio 기능을 계승하면서, 더 빠르고 더 적은 리소스를 사용한다. 특히 메모리 사용량 개선은 극적이다.&lt;/li&gt;
&lt;li&gt;Ambient mode에서는 Ztunnel(L4)을 데몬셋으로, Waypoint(L7)를 디플로이먼트셋으로 활용하여 istio-proxy의 sidecar를 대체한다.&lt;/li&gt;
&lt;/ul&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&gt;Waypoint 는 &lt;a href=&quot;https://www.anyflow.net/5c36cf33-c682-4f84-90da-2f5c961fbf61&quot; data-token-index=&quot;2&quot;&gt;Kubernetes Gateway API&lt;/a&gt;의 Gateway 를 통해 Namespace 단위로 생성하는 것이 기본이다. 이는 Waypoint 가 특정 workload 군에 대한 gateway 역할도 함께함을 의미한다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;2048&quot; data-origin-height=&quot;692&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/0dTN2/btsKdDFhsy3/30jBkkS3bGvdyhrDGBMz3K/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/0dTN2/btsKdDFhsy3/30jBkkS3bGvdyhrDGBMz3K/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/0dTN2/btsKdDFhsy3/30jBkkS3bGvdyhrDGBMz3K/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F0dTN2%2FbtsKdDFhsy3%2F30jBkkS3bGvdyhrDGBMz3K%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;2048&quot; height=&quot;692&quot; data-origin-width=&quot;2048&quot; data-origin-height=&quot;692&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;

&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;istio가 없는 구성 (Baseline), Ambient Mode, Sidecar Mode를 비교했을 때 응답 지연차이를 확인할 수 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;성능은 baseline &amp;gt; ambient &amp;gt; sidecar 순서입니다.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;</description>
      <category>gasida</category>
      <category>istio</category>
      <category>k8s</category>
      <category>network</category>
      <author>엔지니어-여리</author>
      <guid isPermaLink="true">https://yeoli-tech.tistory.com/50</guid>
      <comments>https://yeoli-tech.tistory.com/50#entry50comment</comments>
      <pubDate>Wed, 16 Oct 2024 01:23:26 +0900</pubDate>
    </item>
    <item>
      <title>[KANS 3기] 6주차 GatewayAPI</title>
      <link>https://yeoli-tech.tistory.com/49</link>
      <description>&lt;h2 data-ke-size=&quot;size26&quot;&gt;이전 이야기&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;앞서, Ingress 에서 Ingress는 더이상 개발이 없다고 언급했습니다. GatewayAPI 리소스가 새롭게 등장하였고, Ingress가 했던&amp;nbsp; 작업을 Gateway API에서 지원되기 때문입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;Gateway API&lt;/h2&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;기능&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;gatewayAPI의 주된 기능은 다음과 같습니다.&lt;/p&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;&lt;b&gt;개선된 리소스 모델&lt;br /&gt;&lt;/b&gt;GatewayClass, Gateway 및 Route(HTTPRoute, TCPRoute 등)와 같은 새로운 사용자 정의(CRD) 리소스를 도입하여 라우팅 규칙을 정의하는 보다 세부적이고 표현력 있는 방법을 제공합니다.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;프로토콜 독립적&lt;br /&gt;&lt;/b&gt;Gateway API는 TCP, UDP, TLS를 포함한 여러 프로토콜을 지원합니다. (Ingress는 HTTP용으로 설계됨)&lt;/li&gt;
&lt;li&gt;&lt;b&gt;강화된 보안&lt;br /&gt;&lt;/b&gt;TLS 구성 및 보다 세부적인 액세스 제어에 대한 기본 제공 지원합니다.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;교차 네임스페이스 지원&lt;br /&gt;&lt;/b&gt;서로 다른 네임스페이스의 서비스로 트래픽을 라우팅하여 보다 유연한 아키텍처를 구축할 수 있는 기능을 제공합니다.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;확장성&lt;br /&gt;&lt;/b&gt;API는 사용자 정의 리소스 및 정책으로 쉽게 확장할 수 있도록 설계되었습니다.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;역할 지향&lt;br /&gt;&lt;/b&gt;클러스터 운영자, 애플리케이션 개발자, 보안 팀 간의 우려를 명확하게 분리합니다.&lt;/li&gt;
&lt;/ol&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;구성요소&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;API 명세(&lt;a href=&quot;https://gateway-api.sigs.k8s.io/reference/spec/#gateway.networking.k8s.io/v1.HTTPRoute&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://gateway-api.sigs.k8s.io/reference/spec/#gateway.networking.k8s.io/v1.HTTPRoute&lt;/a&gt;)&lt;/p&gt;
&lt;p&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/VDoGq/btsJ26Jg1qK/aTpopD4JAj1OL268tigCDk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/VDoGq/btsJ26Jg1qK/aTpopD4JAj1OL268tigCDk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/VDoGq/btsJ26Jg1qK/aTpopD4JAj1OL268tigCDk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FVDoGq%2FbtsJ26Jg1qK%2FaTpopD4JAj1OL268tigCDk%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;800&quot; height=&quot;700&quot; data-origin-width=&quot;800&quot; data-origin-height=&quot;700&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;v1 기준 리소스는 4가지 타입이 있습니다. GRPCRoute, Gateway, GatewayClass, HTTPRoute 입니다.&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;GatewayClass&amp;nbsp;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;인프라구성을 제공하는 역할이 구성합니다. 클러스터 수준의 리소스입니다. 게이트웨이 클래스의 변경사항은 기존 게이트웨이 리소스로 전파되지 않습니다. (게이트웨이 클래스 변경으로 인한 문제가 최소한의 장애를 유발하기 위함)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;Gateway&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;클라우드 로드밸런서처럼 인프라스트럭쳐에서 트래픽 핸들링을 정의합니다.&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;GRPCRoute&lt;/span&gt;&lt;/h4&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;821&quot; data-origin-height=&quot;113&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/HY2Da/btsJ20ChoQi/Btej5zKeFFlQdmXzqDwM41/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/HY2Da/btsJ20ChoQi/Btej5zKeFFlQdmXzqDwM41/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/HY2Da/btsJ20ChoQi/Btej5zKeFFlQdmXzqDwM41/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FHY2Da%2FbtsJ20ChoQi%2FBtej5zKeFFlQdmXzqDwM41%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;821&quot; height=&quot;113&quot; data-origin-width=&quot;821&quot; data-origin-height=&quot;113&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;게이트웨이 리스너에서 서비스로 gRPC 요청에 대한 라우팅을 위한 Gateway API 유형입니다.&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;HTTPRoute&lt;/h4&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;821&quot; data-origin-height=&quot;113&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/ddHcP6/btsJ2W1hBsi/cpivpYBIOaWidScFHlXBlK/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/ddHcP6/btsJ2W1hBsi/cpivpYBIOaWidScFHlXBlK/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/ddHcP6/btsJ2W1hBsi/cpivpYBIOaWidScFHlXBlK/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FddHcP6%2FbtsJ2W1hBsi%2FcpivpYBIOaWidScFHlXBlK%2Fimg.jpg&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;821&quot; height=&quot;113&quot; data-origin-width=&quot;821&quot; data-origin-height=&quot;113&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;게이트웨이 리스너에서 서비스로 HTTP 요청에 대한 라우팅을 위한 Gateway API 유형입니다.&lt;/p&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;h2 data-ke-size=&quot;size26&quot;&gt;Gloo Gateway&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://docs.solo.io/gateway/latest/about/architecture/&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://docs.solo.io/gateway/latest/about/architecture/&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1728724337653&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;Architecture | Solo.io documentation&quot; data-og-description=&quot;Learn more about the components that make up Gloo Gateway. These components work together to provide traffic management, security, and resiliency. Component architecture link The following image shows the different components that make up the Gloo Gateway &quot; data-og-host=&quot;docs.solo.io&quot; data-og-source-url=&quot;https://docs.solo.io/gateway/latest/about/architecture/&quot; data-og-url=&quot;https://docs.solo.io/gateway/latest/about/architecture/&quot; data-og-image=&quot;&quot;&gt;&lt;a href=&quot;https://docs.solo.io/gateway/latest/about/architecture/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://docs.solo.io/gateway/latest/about/architecture/&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url();&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;Architecture | Solo.io documentation&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;Learn more about the components that make up Gloo Gateway. These components work together to provide traffic management, security, and resiliency. Component architecture link The following image shows the different components that make up the Gloo Gateway&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;docs.solo.io&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;h3 data-ke-size=&quot;size23&quot;&gt;Architecture&lt;/h3&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2024-10-12 오후 6.36.06.png&quot; data-origin-width=&quot;1032&quot; data-origin-height=&quot;504&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/zsgvv/btsJ2WNJiIX/I04RbbWpvYzjEoMXm0MOP1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/zsgvv/btsJ2WNJiIX/I04RbbWpvYzjEoMXm0MOP1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/zsgvv/btsJ2WNJiIX/I04RbbWpvYzjEoMXm0MOP1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fzsgvv%2FbtsJ2WNJiIX%2FI04RbbWpvYzjEoMXm0MOP1%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;1032&quot; height=&quot;504&quot; data-filename=&quot;스크린샷 2024-10-12 오후 6.36.06.png&quot; data-origin-width=&quot;1032&quot; data-origin-height=&quot;504&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: -apple-system, BlinkMacSystemFont, 'Helvetica Neue', 'Apple SD Gothic Neo', Arial, sans-serif; letter-spacing: 0px;&quot;&gt;gloo pod의 동작은 다음과 같습니다.&lt;/span&gt;&lt;/p&gt;
&lt;ol style=&quot;list-style-type: decimal; background-color: #ffffff; color: #001219; text-align: start;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li style=&quot;list-style-type: none; color: #000000;&quot;&gt;1. The config and secret watcher components in the&lt;span&gt;&amp;nbsp;&lt;/span&gt;gloo&lt;span&gt;&amp;nbsp;&lt;/span&gt;pod watch the cluster for new Kubernetes Gateway API and Gloo Gateway resources, such as Gateways, HTTPRoutes, or RouteOptions.&lt;/li&gt;
&lt;li style=&quot;list-style-type: none; color: #000000;&quot;&gt;2. When the config or secret watcher detect new or updated resources, it sends the resource configuration to the Gloo Gateway translation engine.&lt;/li&gt;
&lt;li style=&quot;list-style-type: none; color: #000000;&quot;&gt;3. The translation engine translates Kubernetes Gateway API and Gloo Gateway resources into Envoy configuration. All Envoy configuration is consolidated into an xDS snapshot.&lt;/li&gt;
&lt;li style=&quot;list-style-type: none; color: #000000;&quot;&gt;4. The reporter receives a status report for every resource that is processed by the translator.&lt;/li&gt;
&lt;li style=&quot;list-style-type: none; color: #000000;&quot;&gt;5. The reporter writes the resource status back to the etcd data store.&lt;/li&gt;
&lt;li style=&quot;list-style-type: none; color: #000000;&quot;&gt;6. The xDS snapshot is provided to the Gloo Gateway xDS server component in the&lt;span&gt;&amp;nbsp;&lt;/span&gt;gloo&lt;span&gt;&amp;nbsp;&lt;/span&gt;pod.&lt;/li&gt;
&lt;li style=&quot;list-style-type: none; color: #000000;&quot;&gt;7. Gateway proxies in the cluster pull the latest Envoy configuration from the Gloo Gateway xDS server.&lt;/li&gt;
&lt;li style=&quot;list-style-type: none; color: #000000;&quot;&gt;8. Users send a request to the IP address or hostname that the gateway proxy is exposed on.&lt;/li&gt;
&lt;li style=&quot;list-style-type: none; color: #000000;&quot;&gt;9. The gateway proxy uses the listener and route-specific configuration that was provided in the xDS snapshot to perform routing decisions and forward requests to destinations in the cluster.&lt;/li&gt;
&lt;/ol&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;Gloo Gateway control plane&lt;/h3&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;Config watcher&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;쿠버네티스 게이트웨이 api혹은 (&lt;span style=&quot;background-color: #ffffff; color: #001219; text-align: start;&quot;&gt;Gateways, HTTPRoutes, and Upstreams)와 같은&amp;nbsp;&lt;/span&gt;글루 게이트웨이 리소스가 신규로 생성되거나 변경됨을 감지하는 역할입니다. 감지한 다음 쿠버네티스 구성을 gloo gateway translate engine을 전달합니다.&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;Secret watcher&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;AWS 자격증명과 같은 secret store의 변경을 감지합니다. gloo gateway의 구성을 감지할 수도 있습니다.&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;Endpoint discovery&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;쿠버네티스 서비스 등록을 감지합니다. 새 엔드포인트나 업데이트된 엔드포인트를 발견하면 구성을 etcd에 저장합니다.&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;Translate Engine&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;사용자가 생성하거나 변경하는 모든 Gateway API, Kubernetes API, Gloo Gateway 리소스 스냅샷을 수신합니다. 이를 적절한 Envoy 구성으로 translate 합니다. envoy 구성을 xDS 스냅샷에 저장합니다.&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;translate cycle&lt;/h4&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2024-10-12 오후 6.35.53.png&quot; data-origin-width=&quot;987&quot; data-origin-height=&quot;582&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/kIAww/btsJ21BaNgY/Z6FiVkIdO9uKantmYtYiz0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/kIAww/btsJ21BaNgY/Z6FiVkIdO9uKantmYtYiz0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/kIAww/btsJ21BaNgY/Z6FiVkIdO9uKantmYtYiz0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FkIAww%2FbtsJ21BaNgY%2FZ6FiVkIdO9uKantmYtYiz0%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;987&quot; height=&quot;582&quot; data-filename=&quot;스크린샷 2024-10-12 오후 6.35.53.png&quot; data-origin-width=&quot;987&quot; data-origin-height=&quot;582&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ol style=&quot;list-style-type: decimal; background-color: #ffffff; color: #001219; text-align: start;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li style=&quot;list-style-type: none; color: #000000;&quot;&gt;1. The translation cycle starts by defining&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;a style=&quot;color: #000000;&quot; href=&quot;https://www.envoyproxy.io/docs/envoy/latest/api-v3/config/cluster/v3/cluster.proto&quot;&gt;Envoy clusters&lt;/a&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;from all configured Upstream and Kubernetes service resources. Clusters in this context are groups of similar hosts. Each Upstream has a type that determines how the Upstream is processed. Correctly configured Upstreams and Kubernetes services are converted into Envoy clusters that match their type, including information like cluster metadata.&lt;/li&gt;
&lt;li style=&quot;list-style-type: none; color: #000000;&quot;&gt;&amp;nbsp;&lt;/li&gt;
&lt;li style=&quot;list-style-type: none; color: #000000;&quot;&gt;2. The next step in the translation cycle is to process all the functions on each Upstream. Function-specific cluster metadata is added and is later processed by function-specific Envoy filters.&lt;/li&gt;
&lt;li style=&quot;list-style-type: none; color: #000000;&quot;&gt;&amp;nbsp;&lt;/li&gt;
&lt;li style=&quot;list-style-type: none; color: #000000;&quot;&gt;3. In the next step, all&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;a style=&quot;color: #000000;&quot; href=&quot;https://www.envoyproxy.io/docs/envoy/latest/api-v3/config/route/v3/route.proto&quot;&gt;Envoy routes&lt;/a&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;are generated. Routes are generated for each route rule that is defined on the HTTPRoute and RouteOption resources. When all of the routes are created, the translator processes any VirtualHostOption, ListenerOption, and HttpListenerOption resources, aggregates them into&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;a style=&quot;color: #000000;&quot; href=&quot;https://www.envoyproxy.io/docs/envoy/latest/api-v3/config/route/v3/route_components.proto#config-route-v3-virtualhost&quot;&gt;Envoy virtual hosts&lt;/a&gt;, and adds them to a new&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;a style=&quot;color: #000000;&quot; href=&quot;https://www.envoyproxy.io/docs/envoy/latest/intro/arch_overview/http/http_connection_management&quot;&gt;Envoy HTTP Connection Manager&lt;/a&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;configuration.&lt;/li&gt;
&lt;li style=&quot;list-style-type: none; color: #000000;&quot;&gt;&amp;nbsp;&lt;/li&gt;
&lt;li style=&quot;list-style-type: none; color: #000000;&quot;&gt;4. Filter plug-ins are queried for their filter configurations, generating the list of HTTP and TCP Filters that are added to the&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;a style=&quot;color: #000000;&quot; href=&quot;https://www.envoyproxy.io/docs/envoy/latest/configuration/listeners/listeners&quot;&gt;Envoy listeners&lt;/a&gt;.&lt;/li&gt;
&lt;li style=&quot;list-style-type: none; color: #000000;&quot;&gt;&amp;nbsp;&lt;/li&gt;
&lt;li style=&quot;list-style-type: none; color: #000000;&quot;&gt;5. Finally, an xDS snapshot is composed of the all the valid endpoints (EDS), clusters (CDS), route configs (RDS), and listeners (LDS). The snapshot is sent to the Gloo Gateway xDS server. Gateway proxies in your cluster watch the xDS server for new config. When new config is detected, the config is pulled into the gateway proxy.&lt;/li&gt;
&lt;/ol&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 id=&quot;reporter&quot; style=&quot;background-color: #ffffff; color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;Reporter&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Reporter는 translator로부터 모든 Gloo Gateway 리소스에 대해 validation report를 전달받습니다. 유효하지 않은 구성은 쿠버네티스 스토리지 계층에 저장됩니다. 또한 유효하지 않은 리소스는 rejected 마크가 포함되고, 리소스 구성에 에러 메시지가 포함됩니다.&lt;/p&gt;
&lt;h3 id=&quot;xds-server&quot; style=&quot;background-color: #ffffff; color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;xDS Server&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;최종 스냅샷은 xDS 서버로 전달되고, 서버 구성 업데이트의 성공을 envoy에 알립니다. Gloo Gateway에서 원하는 상태와 일치하게 envoy 클러스터 구성을 업데이트합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 id=&quot;discovery-architecture&quot; style=&quot;background-color: #ffffff; color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;Discovery architecture&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;글루 게이트웨이는 쿠버네티스 서비스 및 기능들을 스캔하고 라우팅과 셀프 서비스를 용이하게 하기 위해서 자동으로 글루 게이트웨이 업스트림 리소스를 생성할 수 있는 서비스 디스커버리 기능을 내장하고 있습니다. 업스트림 생성하는 서비스의 제어를 더 강화하기 위해 서비스 디스커버리를 비활성화하고 업스트림을 수동으로 생성할 수 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;자동으로 discover 하는 리소스는&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 쿠버네티스 서비스&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- AWS Lambda Function&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- Google Cloud Functions&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- OpenAPI-basedd Functions&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2024-10-12 오후 6.35.40.png&quot; data-origin-width=&quot;1062&quot; data-origin-height=&quot;394&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/rgiCO/btsJ3Lxy1cd/RxonpBjkKpalr238WI2oq0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/rgiCO/btsJ3Lxy1cd/RxonpBjkKpalr238WI2oq0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/rgiCO/btsJ3Lxy1cd/RxonpBjkKpalr238WI2oq0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FrgiCO%2FbtsJ3Lxy1cd%2FRxonpBjkKpalr238WI2oq0%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;1062&quot; height=&quot;394&quot; data-filename=&quot;스크린샷 2024-10-12 오후 6.35.40.png&quot; data-origin-width=&quot;1062&quot; data-origin-height=&quot;394&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&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;h2 data-ke-size=&quot;size26&quot;&gt;그밖에...&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Gloo Gateway 이외에도 Cilium Gateway 등과 같은 Gateway API는 &lt;a href=&quot;https://gateway-api.sigs.k8s.io/implementations/&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://gateway-api.sigs.k8s.io/implementations/&lt;/a&gt;여기를 참조 하시면 됩니다.&lt;/p&gt;
&lt;figure id=&quot;og_1728725846056&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;List - Kubernetes Gateway API&quot; data-og-description=&quot;Implementations This document tracks downstream implementations and integrations of Gateway API and provides status and resource references for them. Implementors and integrators of Gateway API are encouraged to update this document with status information&quot; data-og-host=&quot;gateway-api.sigs.k8s.io&quot; data-og-source-url=&quot;https://gateway-api.sigs.k8s.io/implementations/&quot; data-og-url=&quot;https://gateway-api.sigs.k8s.io/implementations/&quot; data-og-image=&quot;&quot;&gt;&lt;a href=&quot;https://gateway-api.sigs.k8s.io/implementations/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://gateway-api.sigs.k8s.io/implementations/&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url();&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;List - Kubernetes Gateway API&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;Implementations This document tracks downstream implementations and integrations of Gateway API and provides status and resource references for them. Implementors and integrators of Gateway API are encouraged to update this document with status information&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;gateway-api.sigs.k8s.io&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;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 data-ke-size=&quot;size16&quot;&gt;감사합니다.&lt;/p&gt;</description>
      <category>스터디</category>
      <category>gateway api</category>
      <category>kubernetes</category>
      <category>network</category>
      <author>엔지니어-여리</author>
      <guid isPermaLink="true">https://yeoli-tech.tistory.com/49</guid>
      <comments>https://yeoli-tech.tistory.com/49#entry49comment</comments>
      <pubDate>Sat, 12 Oct 2024 18:37:55 +0900</pubDate>
    </item>
    <item>
      <title>[KANS 3기] 6주차 Ingress</title>
      <link>https://yeoli-tech.tistory.com/48</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;실습환경&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;구성하기&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;실습환경은 지난 번과 동일하게 cloudformation으로 구성합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;먼저, 실습 template를 입력합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://s3.ap-northeast-2.amazonaws.com/cloudformation.cloudneta.net/kans/kans-6w.yaml&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://s3.ap-northeast-2.amazonaws.com/cloudformation.cloudneta.net/kans/&lt;span data-token-index=&quot;1&quot;&gt;kans-6w.yaml&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;edited_스크린샷 2024-10-12 오후 12.20.04.png&quot; data-origin-width=&quot;1092&quot; data-origin-height=&quot;756&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bFicfF/btsJ4b3BFiT/VKk3g5ekPGrfLpQQsqVvB0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bFicfF/btsJ4b3BFiT/VKk3g5ekPGrfLpQQsqVvB0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bFicfF/btsJ4b3BFiT/VKk3g5ekPGrfLpQQsqVvB0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbFicfF%2FbtsJ4b3BFiT%2FVKk3g5ekPGrfLpQQsqVvB0%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;1092&quot; height=&quot;756&quot; data-filename=&quot;edited_스크린샷 2024-10-12 오후 12.20.04.png&quot; data-origin-width=&quot;1092&quot; data-origin-height=&quot;756&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그 뒤에 파라미터를 입력해줍니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;stack name은 적절히 mylab으로 입력했습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;ec2 key-pair 이름은 이전에 만들어 둔 키페어를 재활용했습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;t3.medium이 기본 값이지만 필요시 더 큰 사이즈의 인스턴스로 변경하시면 됩니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;edited_스크린샷 2024-10-12 오후 12.27.18.png&quot; data-origin-width=&quot;1250&quot; data-origin-height=&quot;1167&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cNZCTR/btsJ3oWRNkw/eROVN5SLsE7G8ZXUUSgPlK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cNZCTR/btsJ3oWRNkw/eROVN5SLsE7G8ZXUUSgPlK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cNZCTR/btsJ3oWRNkw/eROVN5SLsE7G8ZXUUSgPlK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcNZCTR%2FbtsJ3oWRNkw%2FeROVN5SLsE7G8ZXUUSgPlK%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;1250&quot; height=&quot;1167&quot; data-filename=&quot;edited_스크린샷 2024-10-12 오후 12.27.18.png&quot; data-origin-width=&quot;1250&quot; data-origin-height=&quot;1167&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;모든 입력을 완료 한 후 submit을 클릭하여 스택을 배포합니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;edited_스크린샷 2024-10-12 오후 12.27.27.png&quot; data-origin-width=&quot;1338&quot; data-origin-height=&quot;271&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/p7TpO/btsJ4qTMOci/VWTBh5xPIGbdQWMIiJDxY1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/p7TpO/btsJ4qTMOci/VWTBh5xPIGbdQWMIiJDxY1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/p7TpO/btsJ4qTMOci/VWTBh5xPIGbdQWMIiJDxY1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fp7TpO%2FbtsJ4qTMOci%2FVWTBh5xPIGbdQWMIiJDxY1%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;1338&quot; height=&quot;271&quot; data-filename=&quot;edited_스크린샷 2024-10-12 오후 12.27.27.png&quot; data-origin-width=&quot;1338&quot; data-origin-height=&quot;271&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;잠시 기다리면 모든 배포가 완료된 것을 확인할 수 있습니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;edited_스크린샷 2024-10-12 오후 12.39.24.png&quot; data-origin-width=&quot;1832&quot; data-origin-height=&quot;1473&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/oCEbG/btsJ3fMDLE4/fai9QHk2cY6jkBkJqvF8WK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/oCEbG/btsJ3fMDLE4/fai9QHk2cY6jkBkJqvF8WK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/oCEbG/btsJ3fMDLE4/fai9QHk2cY6jkBkJqvF8WK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FoCEbG%2FbtsJ3fMDLE4%2Ffai9QHk2cY6jkBkJqvF8WK%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;1832&quot; height=&quot;1473&quot; data-filename=&quot;edited_스크린샷 2024-10-12 오후 12.39.24.png&quot; data-origin-width=&quot;1832&quot; data-origin-height=&quot;1473&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;4대의 인스턴스가 생성되어 있는 걸 알 수 있습니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;edited_스크린샷 2024-10-12 오후 12.40.19.png&quot; data-origin-width=&quot;1832&quot; data-origin-height=&quot;1473&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/c6KLaH/btsJ4fkyEyw/CpZREN9JlbLx4EgKKoY5N1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/c6KLaH/btsJ4fkyEyw/CpZREN9JlbLx4EgKKoY5N1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/c6KLaH/btsJ4fkyEyw/CpZREN9JlbLx4EgKKoY5N1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fc6KLaH%2FbtsJ4fkyEyw%2FCpZREN9JlbLx4EgKKoY5N1%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;1832&quot; height=&quot;1473&quot; data-filename=&quot;edited_스크린샷 2024-10-12 오후 12.40.19.png&quot; data-origin-width=&quot;1832&quot; data-origin-height=&quot;1473&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;확인하기&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;cloudformation으로 구성된 실습환경을 확인하겠습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;먼저, EC2 서비스에서 k3s-s 인스턴스의 public IP를 확인합니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;edited_스크린샷 2024-10-12 오후 12.43.14.png&quot; data-origin-width=&quot;1832&quot; data-origin-height=&quot;1473&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/drimsS/btsJ3QFFCej/QjixMjKjCBMwKEdkhDJsZK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/drimsS/btsJ3QFFCej/QjixMjKjCBMwKEdkhDJsZK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/drimsS/btsJ3QFFCej/QjixMjKjCBMwKEdkhDJsZK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdrimsS%2FbtsJ3QFFCej%2FQjixMjKjCBMwKEdkhDJsZK%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;1832&quot; height=&quot;1473&quot; data-filename=&quot;edited_스크린샷 2024-10-12 오후 12.43.14.png&quot; data-origin-width=&quot;1832&quot; data-origin-height=&quot;1473&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이후, terminal에서 ssh 명령으로 k3s-s 인스턴스에 접속합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;노드 정보&lt;/h4&gt;
&lt;pre id=&quot;code_1728704725178&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt; kubectl get nodes -o wide&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;edited_스크린샷 2024-10-12 오후 12.42.19.png&quot; data-origin-width=&quot;1337&quot; data-origin-height=&quot;845&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bGcPIh/btsJ2966xov/lXY1LIOOvl0ek0ud7SOZi0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bGcPIh/btsJ2966xov/lXY1LIOOvl0ek0ud7SOZi0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bGcPIh/btsJ2966xov/lXY1LIOOvl0ek0ud7SOZi0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbGcPIh%2FbtsJ2966xov%2FlXY1LIOOvl0ek0ud7SOZi0%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;1337&quot; height=&quot;845&quot; data-filename=&quot;edited_스크린샷 2024-10-12 오후 12.42.19.png&quot; data-origin-width=&quot;1337&quot; data-origin-height=&quot;845&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&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;h4 data-ke-size=&quot;size20&quot;&gt;파드 정보&lt;/h4&gt;
&lt;pre id=&quot;code_1728704711288&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;kubectl get pod -o wide -A&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;edited_스크린샷 2024-10-12 오후 12.44.57.png&quot; data-origin-width=&quot;1337&quot; data-origin-height=&quot;845&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bxasUn/btsJ3SwHPTB/UYMKXKZoPl7n5V12Suuf8K/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bxasUn/btsJ3SwHPTB/UYMKXKZoPl7n5V12Suuf8K/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bxasUn/btsJ3SwHPTB/UYMKXKZoPl7n5V12Suuf8K/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbxasUn%2FbtsJ3SwHPTB%2FUYMKXKZoPl7n5V12Suuf8K%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;1337&quot; height=&quot;845&quot; data-filename=&quot;edited_스크린샷 2024-10-12 오후 12.44.57.png&quot; data-origin-width=&quot;1337&quot; data-origin-height=&quot;845&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;config 정보&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1728705021351&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;# -v 는 verbose 옵션입니다. kubectl 프로그램의 로그 레벨을 더 높인다는 의미입니다.
kubectl get pod -v=6&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;edited_스크린샷 2024-10-12 오후 12.50.20.png&quot; data-origin-width=&quot;907&quot; data-origin-height=&quot;963&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cc1UfM/btsJ21A7Yik/d9Rr9VEVXE2ZyAPqcConoK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cc1UfM/btsJ21A7Yik/d9Rr9VEVXE2ZyAPqcConoK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cc1UfM/btsJ21A7Yik/d9Rr9VEVXE2ZyAPqcConoK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fcc1UfM%2FbtsJ21A7Yik%2Fd9Rr9VEVXE2ZyAPqcConoK%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;907&quot; height=&quot;963&quot; data-filename=&quot;edited_스크린샷 2024-10-12 오후 12.50.20.png&quot; data-origin-width=&quot;907&quot; data-origin-height=&quot;963&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;edited_스크린샷 2024-10-12 오후 12.50.48.png&quot; data-origin-width=&quot;1337&quot; data-origin-height=&quot;845&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bg3sif/btsJ3skFZnr/ZlODs30Z6QzkV7Y2FbKp2k/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bg3sif/btsJ3skFZnr/ZlODs30Z6QzkV7Y2FbKp2k/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bg3sif/btsJ3skFZnr/ZlODs30Z6QzkV7Y2FbKp2k/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbg3sif%2FbtsJ3skFZnr%2FZlODs30Z6QzkV7Y2FbKp2k%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;1337&quot; height=&quot;845&quot; data-filename=&quot;edited_스크린샷 2024-10-12 오후 12.50.48.png&quot; data-origin-width=&quot;1337&quot; data-origin-height=&quot;845&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span data-token-index=&quot;0&quot;&gt;config 파일의 위치입니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span data-token-index=&quot;0&quot;&gt;/etc/rancher/k3s/k3s.yaml&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;span data-token-index=&quot;0&quot;&gt;네트워크 확인&lt;/span&gt;&lt;/h4&gt;
&lt;pre id=&quot;code_1728705246926&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;# 인스턴스에 등록된 ip 리스트
ip -c addr

# 인스턴스에 등록된 라우팅 정보
ip -c route

#flannel cni의 서브넷 정보
cat /run/flannel/subnet.env

# 쿠버네티스에 등록된 노드들이 가지고 있는 pod CIDR 정보
kubectl get nodes -o jsonpath='{.items[*].spec.podCIDR}' ;echo

# 노드의 annotation 정보. 여기서는 각 노드의 flannel cni 구성 정보 확인
kubectl describe node | grep -A3 Annotations

# 이더넷 브릿지 정보 확인
brctl show&lt;/code&gt;&lt;/pre&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&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;edited_스크린샷 2024-10-12 오후 12.52.52.png&quot; data-origin-width=&quot;1787&quot; data-origin-height=&quot;845&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bB4Ucc/btsJ30gTuCB/DrUYpAbCrrzyRcM8slFZsK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bB4Ucc/btsJ30gTuCB/DrUYpAbCrrzyRcM8slFZsK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bB4Ucc/btsJ30gTuCB/DrUYpAbCrrzyRcM8slFZsK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbB4Ucc%2FbtsJ30gTuCB%2FDrUYpAbCrrzyRcM8slFZsK%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;1787&quot; height=&quot;845&quot; data-filename=&quot;edited_스크린샷 2024-10-12 오후 12.52.52.png&quot; data-origin-width=&quot;1787&quot; data-origin-height=&quot;845&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;edited_스크린샷 2024-10-12 오후 12.53.52.png&quot; data-origin-width=&quot;1787&quot; data-origin-height=&quot;845&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bhBHlw/btsJ2QGE47O/FJPbpJp2WXPHrW2unTAs41/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bhBHlw/btsJ2QGE47O/FJPbpJp2WXPHrW2unTAs41/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bhBHlw/btsJ2QGE47O/FJPbpJp2WXPHrW2unTAs41/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbhBHlw%2FbtsJ2QGE47O%2FFJPbpJp2WXPHrW2unTAs41%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;1787&quot; height=&quot;845&quot; data-filename=&quot;edited_스크린샷 2024-10-12 오후 12.53.52.png&quot; data-origin-width=&quot;1787&quot; data-origin-height=&quot;845&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;서비스, endpoint 정보&lt;/h4&gt;
&lt;pre id=&quot;code_1728705513871&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;kubectl get svc,ep -A&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;kubectl 명령어를 활용하여 서비스, 엔드포인트 정보를 확인합니다.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;edited_스크린샷 2024-10-12 오후 12.57.14.png&quot; data-origin-width=&quot;1787&quot; data-origin-height=&quot;845&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/ddqHsp/btsJ3JfMca1/gsa6zWHhEr7kJEukqnLHFK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/ddqHsp/btsJ3JfMca1/gsa6zWHhEr7kJEukqnLHFK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/ddqHsp/btsJ3JfMca1/gsa6zWHhEr7kJEukqnLHFK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FddqHsp%2FbtsJ3JfMca1%2Fgsa6zWHhEr7kJEukqnLHFK%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;1787&quot; height=&quot;845&quot; data-filename=&quot;edited_스크린샷 2024-10-12 오후 12.57.14.png&quot; data-origin-width=&quot;1787&quot; data-origin-height=&quot;845&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;iptables 정보 확인&lt;/p&gt;
&lt;pre id=&quot;code_1728705535603&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;iptables -t filter -S | wc -l
iptables -t nat -S | wc -l
iptables -t mangle -S | wc -l&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;각 테이블 (filter, nat, mangle)의 iptables 규칙 확인이 가능합니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;edited_스크린샷 2024-10-12 오후 12.58.08.png&quot; data-origin-width=&quot;1787&quot; data-origin-height=&quot;845&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/b4vYJ1/btsJ4eF2OBn/NON9YTo1zY8wWTz19HIlWK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/b4vYJ1/btsJ4eF2OBn/NON9YTo1zY8wWTz19HIlWK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/b4vYJ1/btsJ4eF2OBn/NON9YTo1zY8wWTz19HIlWK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fb4vYJ1%2FbtsJ4eF2OBn%2FNON9YTo1zY8wWTz19HIlWK%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;1787&quot; height=&quot;845&quot; data-filename=&quot;edited_스크린샷 2024-10-12 오후 12.58.08.png&quot; data-origin-width=&quot;1787&quot; data-origin-height=&quot;845&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;위와 같이 실습환경을 준비하였고, 구성을 확인하였습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;Ingress&lt;/h2&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;소개&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;오늘 살펴볼 주제는 &lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;b&gt;Ingress&lt;/b&gt;&lt;/span&gt; 입니다.&amp;nbsp; 인그레스는 클러스터 외부의 요청을 클러스터 내부로 전달해주는 역할을 합니다.&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style1&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;아니 서비스에서 이미 클러스터 외부에 있는 요청을 내부로 전달하지 않았나요 ?&lt;br /&gt;&lt;/span&gt;&lt;/blockquote&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&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;345&quot; data-origin-height=&quot;127&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cMpkgW/btsJ4cOX6mL/jNeH9T7GHWBZBkbqOLDf5k/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cMpkgW/btsJ4cOX6mL/jNeH9T7GHWBZBkbqOLDf5k/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cMpkgW/btsJ4cOX6mL/jNeH9T7GHWBZBkbqOLDf5k/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcMpkgW%2FbtsJ4cOX6mL%2FjNeH9T7GHWBZBkbqOLDf5k%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;345&quot; height=&quot;127&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;345&quot; data-origin-height=&quot;127&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;위 도표와 같이 Ingress는 통신 암호화와 L7 계층에서 동작을 지원합니다. 이를 통해 외부로 노출된 인그레스 리소스로부터 적절한 서비스 - 파드로 HTTP, HTTPS 요청이 전달될 수 있습니다. 이를 간단한 구조로 표현하면 다음과 같습니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;754&quot; data-origin-height=&quot;218&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bxMH1E/btsJ3NWqzZk/hwCHISqguj1xX4rU4DxFOK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bxMH1E/btsJ3NWqzZk/hwCHISqguj1xX4rU4DxFOK/img.png&quot; data-alt=&quot;쿠버네티스 인그레스 문서&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bxMH1E/btsJ3NWqzZk/hwCHISqguj1xX4rU4DxFOK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbxMH1E%2FbtsJ3NWqzZk%2FhwCHISqguj1xX4rU4DxFOK%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;754&quot; height=&quot;218&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;754&quot; data-origin-height=&quot;218&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;쿠버네티스 인그레스 문서&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&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 data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이러한 인그레스를 사용하기 위해서는 인그레스 컨트롤러를 구성해야합니다. 인그레스 컨트롤러는&amp;nbsp; 실제 인그레스의 동작을 구현하는 구현체라고 생각하면 됩니다. 인그레스 컨트롤러는&amp;nbsp;&lt;a href=&quot;https://kubernetes.io/ko/docs/concepts/services-networking/ingress-controllers/&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://kubernetes.io/ko/docs/concepts/services-networking/ingress-controllers/&lt;/a&gt; 에서 더 찾아볼 수 있습니다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;결국, 쿠버네티스에서는 인그레스 API만을 정의하고 실제 구현은 Add-on 에 맡기는 구조입니다. ingress 중에서 ingress-nginx에 대해 살펴보겠습니다. nginx-ingress와는 다릅니다. nginx-ingress는 F5에서 관리하는 인그레스 컨트롤러이고 ingress-nginx는 쿠버네티스에서 관리하는 인그레스 컨트롤러입니다. (헷갈리지 말것)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;알아두어야할 내용&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;인그레스는 현재 새로운 기능이 제공되지 않습니다.&lt;span&gt;&amp;nbsp;&lt;/span&gt;인그레스를 대신할 gateway API라는 다른 유형의 리소스가 등장하였습니다.&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;ingress-nginx 실습&lt;/h3&gt;
&lt;pre id=&quot;code_1728711168763&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;cat &amp;lt;&amp;lt;EOT&amp;gt; ingress-nginx-values.yaml
controller:
  service:
    type: NodePort
    nodePorts:
      http: 30080
      https: 30443
  nodeSelector:
    kubernetes.io/hostname: &quot;k3s-s&quot;
  metrics:
    enabled: true
  serviceMonitor:
      enabled: true
EOT

helm repo add ingress-nginx https://kubernetes.github.io/ingress-nginx
helm repo update

kubectl create ns ingress
helm install ingress-nginx ingress-nginx/ingress-nginx -f ingress-nginx-values.yaml --namespace ingress --version 4.11.2

# externalTrafficPolicy 설정
kubectl patch svc -n ingress ingress-nginx-controller -p '{&quot;spec&quot;:{&quot;externalTrafficPolicy&quot;: &quot;Local&quot;}}'&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;위 명령어를 실행해보겠습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1. ingress-nginx controller 매니페스트를 정의합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2. ingress-nginx 헬름을 추가하고 앞서 정의한 컨트롤러 메니페스트를 적용합니다.&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;설정 확인&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;리소스가 정상적으로 적용되었는지 확인합니다. configmap 에는 ingress 리소스가 참조하는 label, annotation이 포함되어 있는 것을 확인할 수 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1728711356279&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt; kubectl get configmap ingress-nginx-controller -n ingress -o yaml&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;edited_스크린샷 2024-10-12 오후 2.35.42.png&quot; data-origin-width=&quot;1787&quot; data-origin-height=&quot;845&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dre3KN/btsJ2vpdP71/avq2zxkGORPYaSLF7rk9QK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dre3KN/btsJ2vpdP71/avq2zxkGORPYaSLF7rk9QK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dre3KN/btsJ2vpdP71/avq2zxkGORPYaSLF7rk9QK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fdre3KN%2FbtsJ2vpdP71%2Favq2zxkGORPYaSLF7rk9QK%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;1787&quot; height=&quot;845&quot; data-filename=&quot;edited_스크린샷 2024-10-12 오후 2.35.42.png&quot; data-origin-width=&quot;1787&quot; data-origin-height=&quot;845&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1728711748855&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;kc describe clusterroles ingress-nginx&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;컨트롤러의 권한을 확인합니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;edited_스크린샷 2024-10-12 오후 2.42.17.png&quot; data-origin-width=&quot;1337&quot; data-origin-height=&quot;845&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/Su2ua/btsJ2Yj8aea/4j9Tyitui6WkbIeCv8nrH0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/Su2ua/btsJ2Yj8aea/4j9Tyitui6WkbIeCv8nrH0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/Su2ua/btsJ2Yj8aea/4j9Tyitui6WkbIeCv8nrH0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FSu2ua%2FbtsJ2Yj8aea%2F4j9Tyitui6WkbIeCv8nrH0%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;1337&quot; height=&quot;845&quot; data-filename=&quot;edited_스크린샷 2024-10-12 오후 2.42.17.png&quot; data-origin-width=&quot;1337&quot; data-origin-height=&quot;845&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;인그레스 컨트롤러 파드에서 ingress 컨트롤러의 정보를 확인할 수 있습니다.&lt;/p&gt;
&lt;pre id=&quot;code_1728711878059&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;POD_NAMESPACE=ingress
POD_NAME=$(kubectl get pods -n $POD_NAMESPACE -l app.kubernetes.io/name=ingress-nginx --field-selector=status.phase=Running -o name)
kubectl exec $POD_NAME -n $POD_NAMESPACE -- /nginx-ingress-controller --version&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;edited_스크린샷 2024-10-12 오후 2.43.37.png&quot; data-origin-width=&quot;1337&quot; data-origin-height=&quot;845&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/ckcUR0/btsJ4uaKamo/sMk1BcKSfZFJxBkM2XZio0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/ckcUR0/btsJ4uaKamo/sMk1BcKSfZFJxBkM2XZio0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/ckcUR0/btsJ4uaKamo/sMk1BcKSfZFJxBkM2XZio0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FckcUR0%2FbtsJ4uaKamo%2FsMk1BcKSfZFJxBkM2XZio0%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;1337&quot; height=&quot;845&quot; data-filename=&quot;edited_스크린샷 2024-10-12 오후 2.43.37.png&quot; data-origin-width=&quot;1337&quot; data-origin-height=&quot;845&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;여기서 웃긴 점은 앞에서 ingress-nginx, nginx-ingress차이를 말했었죠? 우리가 구성한 인그레스 컨트롤러는 ingress-nginx인데 인그레스 컨트롤러 파드에서 컨트롤러 정보를 확인하는 명령어는 nginx-ingress-controller 입니다. 뭔가 여기저기서 마구잡이로 사용되었을 수 있다는 느낌이 듭니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;Ingress 실습&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이제 본격적으로 인그레스 실습을 해보겠습니다. 실습할 구성은 다음과 같습니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;1017&quot; data-origin-height=&quot;741&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cs5yQs/btsJ4hinCei/KvNc6R86wVkTEUbJb3jCx0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cs5yQs/btsJ4hinCei/KvNc6R86wVkTEUbJb3jCx0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cs5yQs/btsJ4hinCei/KvNc6R86wVkTEUbJb3jCx0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fcs5yQs%2FbtsJ4hinCei%2FKvNc6R86wVkTEUbJb3jCx0%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;1017&quot; height=&quot;741&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;1017&quot; data-origin-height=&quot;741&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;실습 목표&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 컨트롤플레인 노드에 인그레스 컨트롤러 생성, NodePort 외부 노출&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 인그레스 정책 설정 (Host/Path Routing)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;실습내용을 구성해보겠습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;아래는 실행되는 매니페스트 상세내용입니다.&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;매니페스트&lt;/h3&gt;
&lt;div data-ke-type=&quot;moreLess&quot; data-text-more=&quot;더보기&quot; data-text-less=&quot;닫기&quot;&gt;&lt;a class=&quot;btn-toggle-moreless&quot;&gt;더보기&lt;/a&gt;
&lt;div class=&quot;moreless-content&quot;&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;svc1-pod.yaml&lt;/p&gt;
&lt;pre id=&quot;code_1728718278331&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;apiVersion: apps/v1
kind: Deployment
metadata:
  name: deploy1-websrv
spec:
  replicas: 1
  selector:
    matchLabels:
      app: websrv
  template:
    metadata:
      labels:
        app: websrv
    spec:
      containers:
      - name: pod-web
        image: nginx
---
apiVersion: v1
kind: Service
metadata:
  name: svc1-web
spec:
  ports:
    - name: web-port
      port: 9001
      targetPort: 80
  selector:
    app: websrv
  type: ClusterIP&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;svc2-pod.yaml&lt;/p&gt;
&lt;pre id=&quot;code_1728718265244&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;apiVersion: apps/v1
kind: Deployment
metadata:
  name: deploy2-guestsrv
spec:
  replicas: 2
  selector:
    matchLabels:
      app: guestsrv
  template:
    metadata:
      labels:
        app: guestsrv
    spec:
      containers:
      - name: pod-guest
        image: gcr.io/google-samples/kubernetes-bootcamp:v1
        ports:
        - containerPort: 8080
---
apiVersion: v1
kind: Service
metadata:
  name: svc2-guest
spec:
  ports:
    - name: guest-port
      port: 9002
      targetPort: 8080
  selector:
    app: guestsrv
  type: NodePort&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;svc3-pod.yaml&lt;/p&gt;
&lt;pre id=&quot;code_1728718249089&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;apiVersion: apps/v1
kind: Deployment
metadata:
  name: deploy3-adminsrv
spec:
  replicas: 3
  selector:
    matchLabels:
      app: adminsrv
  template:
    metadata:
      labels:
        app: adminsrv
    spec:
      containers:
      - name: pod-admin
        image: k8s.gcr.io/echoserver:1.5
        ports:
        - containerPort: 8080
---
apiVersion: v1
kind: Service
metadata:
  name: svc3-admin
spec:
  ports:
    - name: admin-port
      port: 9003
      targetPort: 8080
  selector:
    app: adminsrv&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;ingress1.yaml&lt;/p&gt;
&lt;pre id=&quot;code_1728718224724&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: ingress-1
  annotations:
    #nginx.ingress.kubernetes.io/upstream-hash-by: &quot;true&quot;
spec:
  ingressClassName: nginx
  rules:
  - http:
      paths:
      - path: /
        pathType: Prefix
        backend:
          service:
            name: svc1-web
            port:
              number: 80
      - path: /guest
        pathType: Prefix
        backend:
          service:
            name: svc2-guest
            port:
              number: 8080
      - path: /admin
        pathType: Prefix
        backend:
          service:
            name: svc3-admin
            port:
              number: 8080&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;ingress2.yaml&lt;/p&gt;
&lt;pre id=&quot;code_1728718192287&quot; class=&quot;yaml&quot; data-ke-type=&quot;codeblock&quot; data-ke-language=&quot;bash&quot;&gt;&lt;code&gt;apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: ingress-2
spec:
  ingressClassName: nginx
  rules:
  - host: kans.com
    http:
      paths:
      - path: /
        pathType: Prefix
        backend:
          service:
            name: svc3-admin
            port:
              number: 8080
  - host: &quot;*.kans.com&quot;
    http:
      paths:
      - path: /echo
        pathType: Prefix
        backend:
          service:
            name: svc3-admin
            port:
              number: 8080&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;canary-svc1-pod.yaml&lt;/p&gt;
&lt;pre id=&quot;code_1728719452789&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;apiVersion: apps/v1
kind: Deployment
metadata:
  name: dp-v1
spec:
  replicas: 3
  selector:
    matchLabels:
      app: svc-v1
  template:
    metadata:
      labels:
        app: svc-v1
    spec:
      containers:
      - name: pod-v1
        image: k8s.gcr.io/echoserver:1.5
        ports:
        - containerPort: 8080
      terminationGracePeriodSeconds: 0
---
apiVersion: v1
kind: Service
metadata:
  name: svc-v1
spec:
  ports:
    - name: web-port
      port: 9001
      targetPort: 8080
  selector:
    app: svc-v1&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;canary-svc2-pod.yaml&lt;/p&gt;
&lt;pre id=&quot;code_1728719471624&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;apiVersion: apps/v1
kind: Deployment
metadata:
  name: dp-v2
spec:
  replicas: 3
  selector:
    matchLabels:
      app: svc-v2
  template:
    metadata:
      labels:
        app: svc-v2
    spec:
      containers:
      - name: pod-v2
        image: k8s.gcr.io/echoserver:1.6
        ports:
        - containerPort: 8080
      terminationGracePeriodSeconds: 0
---
apiVersion: v1
kind: Service
metadata:
  name: svc-v2
spec:
  ports:
    - name: web-port
      port: 9001
      targetPort: 8080
  selector:
    app: svc-v2&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;canary-ingress1.yaml&lt;/p&gt;
&lt;pre id=&quot;code_1728719882815&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: ingress-canary-v1
spec:
  ingressClassName: nginx
  rules:
  - host: kans.com
    http:
      paths:
      - path: /
        pathType: Prefix
        backend:
          service:
            name: svc-v1
            port:
              number: 8080&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;canary-ingress2.yaml&lt;/p&gt;
&lt;pre id=&quot;code_1728719911526&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: ingress-canary-v2
  annotations:
    nginx.ingress.kubernetes.io/canary: &quot;true&quot;
    nginx.ingress.kubernetes.io/canary-weight: &quot;10&quot;
spec:
  ingressClassName: nginx
  rules:
  - host: kans.com
    http:
      paths:
      - path: /
        pathType: Prefix
        backend:
          service:
            name: svc-v2
            port:
              number: 8080&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&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 data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;실습 1. 인그레스 적용 및 리소스 확인&lt;/h3&gt;
&lt;pre id=&quot;code_1728712970408&quot; class=&quot;crystal&quot; style=&quot;background-color: #f8f8f8; color: #383a42; text-align: start;&quot; data-ke-type=&quot;codeblock&quot; data-ke-language=&quot;bash&quot;&gt;&lt;code&gt;kubectl taint nodes k3s-s role=controlplane:NoSchedule
curl -s -O https://raw.githubusercontent.com/gasida/NDKS/main/7/svc1-pod.yaml
curl -s -O https://raw.githubusercontent.com/gasida/NDKS/main/7/svc2-pod.yaml
curl -s -O https://raw.githubusercontent.com/gasida/NDKS/main/7/svc3-pod.yaml
kubectl apply -f svc1-pod.yaml,svc2-pod.yaml,svc3-pod.yaml&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;위 코드블럭을 실행시키면 아래 동영상과 같이 pod,ep, svc가 구성됩니다.&lt;/p&gt;
&lt;figure data-ke-type=&quot;video&quot; data-ke-style=&quot;alignCenter&quot; data-video-host=&quot;kakaotv&quot; data-video-url=&quot;https://tv.kakao.com/v/450130174&quot; data-video-thumbnail=&quot;https://scrap.kakaocdn.net/dn/uriSx/hyXhXRsBUq/dbrSeoSZB8WB9o5gJcQtik/img.jpg?width=1226&amp;amp;height=736&amp;amp;face=0_0_1226_736,https://scrap.kakaocdn.net/dn/riYWL/hyXhTastDo/5bFwkvDfxtRUIesqrMuT1k/img.jpg?width=1226&amp;amp;height=736&amp;amp;face=0_0_1226_736&quot; data-video-width=&quot;860&quot; data-video-height=&quot;516&quot; data-video-origin-width=&quot;860&quot; data-video-origin-height=&quot;516&quot; data-ke-mobilestyle=&quot;widthContent&quot; data-video-play-service=&quot;daum_tistory&quot; data-original-url=&quot;&quot; data-video-title=&quot;&quot;&gt;&lt;iframe src=&quot;https://play-tv.kakao.com/embed/player/cliplink/450130174?service=daum_tistory&quot; width=&quot;860&quot; height=&quot;516&quot; frameborder=&quot;0&quot; allowfullscreen=&quot;true&quot;&gt;&lt;/iframe&gt;
&lt;figcaption style=&quot;display: none;&quot;&gt;&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;위에 설정된 파드, 엔드포인트, 서비스에 인그레스 설정을 추가해보겠습니다. 위에 정의한 ingress1.yaml을 적용해줍니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;아래 영상과 같이 ingress - svc - pod 구성이 적용됩니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;figure data-ke-type=&quot;video&quot; data-ke-style=&quot;alignCenter&quot; data-video-host=&quot;kakaotv&quot; data-video-url=&quot;https://tv.kakao.com/v/450130440&quot; data-video-thumbnail=&quot;https://scrap.kakaocdn.net/dn/dgdL41/hyXd4kohnN/cnOr2M33TKCZbBe4Wf9yMk/img.jpg?width=1226&amp;amp;height=736&amp;amp;face=0_0_1226_736,https://scrap.kakaocdn.net/dn/bE7mLO/hyXeadSmqn/arvcZPk0akEnj3tax1A8Dk/img.jpg?width=1226&amp;amp;height=736&amp;amp;face=0_0_1226_736&quot; data-video-width=&quot;860&quot; data-video-height=&quot;516&quot; data-video-origin-width=&quot;860&quot; data-video-origin-height=&quot;516&quot; data-ke-mobilestyle=&quot;widthContent&quot; data-video-play-service=&quot;daum_tistory&quot; data-original-url=&quot;&quot; data-video-title=&quot;&quot;&gt;&lt;iframe src=&quot;https://play-tv.kakao.com/embed/player/cliplink/450130440?service=daum_tistory&quot; width=&quot;860&quot; height=&quot;516&quot; frameborder=&quot;0&quot; allowfullscreen=&quot;true&quot;&gt;&lt;/iframe&gt;
&lt;figcaption style=&quot;display: none;&quot;&gt;&lt;/figcaption&gt;
&lt;/figure&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 data-ke-size=&quot;size16&quot;&gt;인그레스 컨트롤러에 기록된 Rule은 실제로 인그레스 컨트롤러 파드의 nginx.conf에 적용됩니다.&lt;/p&gt;
&lt;pre id=&quot;code_1728714210364&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;kubectl exec deploy/ingress-nginx-controller -n ingress -it -- cat /etc/nginx/nginx.conf | grep 'location /' -A5 | more&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;1337&quot; data-origin-height=&quot;845&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cPGvVQ/btsJ32snQSg/MKplNwc6Fo63gLyW9UHpVk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cPGvVQ/btsJ32snQSg/MKplNwc6Fo63gLyW9UHpVk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cPGvVQ/btsJ32snQSg/MKplNwc6Fo63gLyW9UHpVk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcPGvVQ%2FbtsJ32snQSg%2FMKplNwc6Fo63gLyW9UHpVk%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;1337&quot; height=&quot;845&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;1337&quot; data-origin-height=&quot;845&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;인그레스 컨트롤러를 통해서 접속해보겠습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;컨트롤러의 인입 포트(30080)와 Public IP(13.124.30.188)를 확인한 다음 Rule에 맞게 url을 입력하여 접속해보겠습니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;edited_스크린샷 2024-10-12 오후 3.40.49.png&quot; data-origin-width=&quot;1337&quot; data-origin-height=&quot;845&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/1M3u3/btsJ4JyRX7T/2eoorYUHI3TKvxD3rQxrTk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/1M3u3/btsJ4JyRX7T/2eoorYUHI3TKvxD3rQxrTk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/1M3u3/btsJ4JyRX7T/2eoorYUHI3TKvxD3rQxrTk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F1M3u3%2FbtsJ4JyRX7T%2F2eoorYUHI3TKvxD3rQxrTk%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;1337&quot; height=&quot;845&quot; data-filename=&quot;edited_스크린샷 2024-10-12 오후 3.40.49.png&quot; data-origin-width=&quot;1337&quot; data-origin-height=&quot;845&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;edited_스크린샷 2024-10-12 오후 3.44.49.png&quot; data-origin-width=&quot;400&quot; data-origin-height=&quot;33&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/zmnxp/btsJ33rhQTn/M7fpfhsOVncLrxkr90vBvK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/zmnxp/btsJ33rhQTn/M7fpfhsOVncLrxkr90vBvK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/zmnxp/btsJ33rhQTn/M7fpfhsOVncLrxkr90vBvK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fzmnxp%2FbtsJ33rhQTn%2FM7fpfhsOVncLrxkr90vBvK%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;400&quot; height=&quot;33&quot; data-filename=&quot;edited_스크린샷 2024-10-12 오후 3.44.49.png&quot; data-origin-width=&quot;400&quot; data-origin-height=&quot;33&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;edited_스크린샷 2024-10-12 오후 3.41.22.png&quot; data-origin-width=&quot;823&quot; data-origin-height=&quot;730&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/exS60P/btsJ3O8Zf0Y/wL3yEPIxYgCzV6mU5aHHT0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/exS60P/btsJ3O8Zf0Y/wL3yEPIxYgCzV6mU5aHHT0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/exS60P/btsJ3O8Zf0Y/wL3yEPIxYgCzV6mU5aHHT0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FexS60P%2FbtsJ3O8Zf0Y%2FwL3yEPIxYgCzV6mU5aHHT0%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;823&quot; height=&quot;730&quot; data-filename=&quot;edited_스크린샷 2024-10-12 오후 3.41.22.png&quot; data-origin-width=&quot;823&quot; data-origin-height=&quot;730&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;edited_스크린샷 2024-10-12 오후 3.41.30.png&quot; data-origin-width=&quot;823&quot; data-origin-height=&quot;730&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/DB0tf/btsJ34Rg3cu/p0NkS2UXwQlF12VrE996pK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/DB0tf/btsJ34Rg3cu/p0NkS2UXwQlF12VrE996pK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/DB0tf/btsJ34Rg3cu/p0NkS2UXwQlF12VrE996pK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FDB0tf%2FbtsJ34Rg3cu%2Fp0NkS2UXwQlF12VrE996pK%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;823&quot; height=&quot;730&quot; data-filename=&quot;edited_스크린샷 2024-10-12 오후 3.41.30.png&quot; data-origin-width=&quot;823&quot; data-origin-height=&quot;730&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;edited_스크린샷 2024-10-12 오후 3.41.35.png&quot; data-origin-width=&quot;823&quot; data-origin-height=&quot;730&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/Apkhu/btsJ27IhRDA/KOqgkC8X7LSKDkRaA3DNu1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/Apkhu/btsJ27IhRDA/KOqgkC8X7LSKDkRaA3DNu1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/Apkhu/btsJ27IhRDA/KOqgkC8X7LSKDkRaA3DNu1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FApkhu%2FbtsJ27IhRDA%2FKOqgkC8X7LSKDkRaA3DNu1%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;823&quot; height=&quot;730&quot; data-filename=&quot;edited_스크린샷 2024-10-12 오후 3.41.35.png&quot; data-origin-width=&quot;823&quot; data-origin-height=&quot;730&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1728715554366&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;http://13.124.30.188:30080/

http://13.124.30.188:30080/guest

http://13.124.30.188:30080/admin&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;접속이 잘 되는 것을 확인할 수 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;실습 2. 패킷 캡쳐 및 분석&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;패킷을 캡쳐하여 통신이 어떤식으로 이루어지는지 알아보겠습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;아래 명령어를 활용하여 패킷을 저장 해줍니다.&lt;/p&gt;
&lt;pre id=&quot;code_1728716989174&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;tcpdump -i $(ifconfig  | grep veth | tail -1 | awk '{print $1}' | cut -d ':' -f 1) tcp port 8080 -w /home/ubuntu/ingress-nginx-admin.pcap &amp;amp;&amp;amp; chown ubuntu /home/ubuntu/ingress-*&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;http://13.124.30.188:30080/admin 주소에 1회 접속 후 패킷캡쳐를 종료합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1728717060598&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;scp -i ~/.ssh/yeoli.pem ubuntu@13.124.30.188:/home/ubuntu/ingress-nginx-admin.pcap .&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;패킷을 다운로드 받은 다음 Wireshark로 패킷 덤프를 열어보겠습니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;edited_스크린샷 2024-10-12 오후 4.11.47.png&quot; data-origin-width=&quot;1058&quot; data-origin-height=&quot;634&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/o90Df/btsJ4squsI5/sqYgMKcuPekqz8JRx3oZwK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/o90Df/btsJ4squsI5/sqYgMKcuPekqz8JRx3oZwK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/o90Df/btsJ4squsI5/sqYgMKcuPekqz8JRx3oZwK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fo90Df%2FbtsJ4squsI5%2FsqYgMKcuPekqz8JRx3oZwK%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;1058&quot; height=&quot;634&quot; data-filename=&quot;edited_스크린샷 2024-10-12 오후 4.11.47.png&quot; data-origin-width=&quot;1058&quot; data-origin-height=&quot;634&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 패킷 덤프에서는 172.16.0.4 와 172.16.3.5 사이에 통신이 있는 것으로 보입니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;edited_스크린샷 2024-10-12 오후 4.18.42.png&quot; data-origin-width=&quot;1337&quot; data-origin-height=&quot;868&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/pTuGk/btsJ4rrFSpy/13Nvaof54YdJLADGrfApSK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/pTuGk/btsJ4rrFSpy/13Nvaof54YdJLADGrfApSK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/pTuGk/btsJ4rrFSpy/13Nvaof54YdJLADGrfApSK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FpTuGk%2FbtsJ4rrFSpy%2F13Nvaof54YdJLADGrfApSK%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;1337&quot; height=&quot;868&quot; data-filename=&quot;edited_스크린샷 2024-10-12 오후 4.18.42.png&quot; data-origin-width=&quot;1337&quot; data-origin-height=&quot;868&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이를 cluster에서 리소스를 조회해보면 172.16.0.4는 ingress controller의 ip, 172.16.3.5는 admin pod의 ip로 확인됩니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;906&quot; data-origin-height=&quot;172&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bzq6oj/btsJ31z74or/mGAlcZ8RHUXkkzN267E040/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bzq6oj/btsJ31z74or/mGAlcZ8RHUXkkzN267E040/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bzq6oj/btsJ31z74or/mGAlcZ8RHUXkkzN267E040/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbzq6oj%2FbtsJ31z74or%2FmGAlcZ8RHUXkkzN267E040%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;906&quot; height=&quot;172&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;906&quot; data-origin-height=&quot;172&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;실제로 인그레스 컨트롤러&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;HTTP 요청에서는 요청자 IP(저의 public ip)와 클러스터의 노드포트 정보가 포함되어 있습니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;1991&quot; data-origin-height=&quot;1441&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/mCtu5/btsJ3mLQdc4/EMVAIaqweNzKJRwXk8qQs0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/mCtu5/btsJ3mLQdc4/EMVAIaqweNzKJRwXk8qQs0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/mCtu5/btsJ3mLQdc4/EMVAIaqweNzKJRwXk8qQs0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FmCtu5%2FbtsJ3mLQdc4%2FEMVAIaqweNzKJRwXk8qQs0%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;1991&quot; height=&quot;1441&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;1991&quot; data-origin-height=&quot;1441&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&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;h3 data-ke-size=&quot;size23&quot;&gt;실습 3. 호스트 기반 라우팅&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;ingress2.yaml 매니페스트를 적용해보겠습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;적용시 아래와 같이 ingress-2 가 생성됩니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;호스트는 kans.com, *.kans.com이 아닌 yeoli.com, *.yeoli.com 로 설정하였습니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;edited_스크린샷 2024-10-12 오후 4.36.34.png&quot; data-origin-width=&quot;1337&quot; data-origin-height=&quot;868&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/UCVZ4/btsJ3NhO0mg/2m7ieqZViIJjEHKWkv3z00/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/UCVZ4/btsJ3NhO0mg/2m7ieqZViIJjEHKWkv3z00/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/UCVZ4/btsJ3NhO0mg/2m7ieqZViIJjEHKWkv3z00/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FUCVZ4%2FbtsJ3NhO0mg%2F2m7ieqZViIJjEHKWkv3z00%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;1337&quot; height=&quot;868&quot; data-filename=&quot;edited_스크린샷 2024-10-12 오후 4.36.34.png&quot; data-origin-width=&quot;1337&quot; data-origin-height=&quot;868&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이후 내 PC에서 host 파일을 수정해야합니다. root 계정에서 아래 명령어를 사용하여 hosts 파일을 수정해줍니다.&lt;/p&gt;
&lt;pre id=&quot;code_1728718855447&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;K3S_PUBLIC_IP='13.124.30.188' # 구성된 클러스터의 public ip를 기입해주세요.
echo $K3S_PUBLIC_IP yeoli.com &amp;gt;&amp;gt; /etc/hosts&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;edited_스크린샷 2024-10-12 오후 4.41.48.png&quot; data-origin-width=&quot;1337&quot; data-origin-height=&quot;868&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/QjEXk/btsJ3SpX3TC/gRWdlm6WO9yV98ywt5Txk1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/QjEXk/btsJ3SpX3TC/gRWdlm6WO9yV98ywt5Txk1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/QjEXk/btsJ3SpX3TC/gRWdlm6WO9yV98ywt5Txk1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FQjEXk%2FbtsJ3SpX3TC%2FgRWdlm6WO9yV98ywt5Txk1%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;1337&quot; height=&quot;868&quot; data-filename=&quot;edited_스크린샷 2024-10-12 오후 4.41.48.png&quot; data-origin-width=&quot;1337&quot; data-origin-height=&quot;868&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;잘 접속되는 것을 확인할 수 있습니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;edited_스크린샷 2024-10-12 오후 4.47.24.png&quot; data-origin-width=&quot;823&quot; data-origin-height=&quot;730&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bi2mB0/btsJ34wW2He/66Al67vpNSEQ827nBIWgdK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bi2mB0/btsJ34wW2He/66Al67vpNSEQ827nBIWgdK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bi2mB0/btsJ34wW2He/66Al67vpNSEQ827nBIWgdK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbi2mB0%2FbtsJ34wW2He%2F66Al67vpNSEQ827nBIWgdK%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;823&quot; height=&quot;730&quot; data-filename=&quot;edited_스크린샷 2024-10-12 오후 4.47.24.png&quot; data-origin-width=&quot;823&quot; data-origin-height=&quot;730&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;실습 4. 카나리 업그레이드&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt; 카나리 업그레이드 대상이 될 파드를 배포해줍니다.&lt;/p&gt;
&lt;pre id=&quot;code_1728719653940&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;kubectl apply -f canary-svc1-pod.yaml,canary-svc2-pod.yaml&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;edited_스크린샷 2024-10-12 오후 4.53.55.png&quot; data-origin-width=&quot;1337&quot; data-origin-height=&quot;868&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/DTal3/btsJ3OOExYM/l9JRCxlaMSeLSnKwA0XKbK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/DTal3/btsJ3OOExYM/l9JRCxlaMSeLSnKwA0XKbK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/DTal3/btsJ3OOExYM/l9JRCxlaMSeLSnKwA0XKbK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FDTal3%2FbtsJ3OOExYM%2Fl9JRCxlaMSeLSnKwA0XKbK%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;1337&quot; height=&quot;868&quot; data-filename=&quot;edited_스크린샷 2024-10-12 오후 4.53.55.png&quot; data-origin-width=&quot;1337&quot; data-origin-height=&quot;868&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;마찬가지로 인그레스도 배포해줍니다.&lt;/p&gt;
&lt;pre id=&quot;code_1728720725277&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;kubectl apply -f canary-ingress1.yaml,canary-ingress2.yaml&lt;/code&gt;&lt;/pre&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 data-ke-size=&quot;size16&quot;&gt;canary-ingress2.yaml의 annotation입니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;edited_스크린샷 2024-10-12 오후 5.13.23.png&quot; data-origin-width=&quot;530&quot; data-origin-height=&quot;249&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/ImtEM/btsJ2VH6tFu/68qExdGNVyxJ5NxiPlq7Wk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/ImtEM/btsJ2VH6tFu/68qExdGNVyxJ5NxiPlq7Wk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/ImtEM/btsJ2VH6tFu/68qExdGNVyxJ5NxiPlq7Wk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FImtEM%2FbtsJ2VH6tFu%2F68qExdGNVyxJ5NxiPlq7Wk%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;530&quot; height=&quot;249&quot; data-filename=&quot;edited_스크린샷 2024-10-12 오후 5.13.23.png&quot; data-origin-width=&quot;530&quot; data-origin-height=&quot;249&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;canary: true&lt;br /&gt;canary-weight: 10&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;즉 카나리 설정을 활성화하고 카나리 비율을 10퍼센트로 한다는 설정을 포함합니다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;이 weight은 ingress-canary-v2로 들어오는 요청의 비율을 뜻합니다.&lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1728720917300&quot; class=&quot;routeros&quot; style=&quot;background-color: #f8f8f8; color: #383a42; text-align: start;&quot; data-ke-type=&quot;codeblock&quot; data-ke-language=&quot;bash&quot;&gt;&lt;code&gt;kubectl annotate --overwrite ingress ingress-canary-v2 nginx.ingress.kubernetes.io/canary-weight=50&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;ingress-canary-v2 로 들어오는 요청을 조절하면 아래 동영상과 같이 실시간으로 버전에 따른 요청량을 조절할 수 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;개발 사이클에서 사용자 경험을 더욱 높일 수 있는 방법으로 활용될 수 있습니다.&lt;/p&gt;
&lt;figure data-ke-type=&quot;video&quot; data-ke-style=&quot;alignCenter&quot; data-video-host=&quot;kakaotv&quot; data-video-url=&quot;https://tv.kakao.com/v/450132287&quot; data-video-thumbnail=&quot;https://scrap.kakaocdn.net/dn/b4Yn78/hyXhNux9Ke/PsrVCUInT1yk8jCB3sGD30/img.jpg?width=1226&amp;amp;height=736&amp;amp;face=0_0_1226_736,https://scrap.kakaocdn.net/dn/oxD6Q/hyXhQSmXF2/kB7qHe7IcroLAmEykT3fI0/img.jpg?width=1226&amp;amp;height=736&amp;amp;face=0_0_1226_736&quot; data-video-width=&quot;860&quot; data-video-height=&quot;516&quot; data-video-origin-width=&quot;860&quot; data-video-origin-height=&quot;516&quot; data-ke-mobilestyle=&quot;widthContent&quot; data-video-play-service=&quot;daum_tistory&quot; data-original-url=&quot;&quot; data-video-title=&quot;&quot;&gt;&lt;iframe src=&quot;https://play-tv.kakao.com/embed/player/cliplink/450132287?service=daum_tistory&quot; width=&quot;860&quot; height=&quot;516&quot; frameborder=&quot;0&quot; allowfullscreen=&quot;true&quot;&gt;&lt;/iframe&gt;
&lt;figcaption style=&quot;display: none;&quot;&gt;&lt;/figcaption&gt;
&lt;/figure&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;h2 data-ke-size=&quot;size26&quot;&gt;정리&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;단순히 서비스를 활용하면 쿠버네티스 클러스터 내부에 있는 파드를외부에서 요청할 수 있습니다. 다만 클러스터 내에서 여러 서비스를 다양하게 제어 하기에는 역부족입니다. 이를 해결해주기 위해 인그레스를 도입할 수 있습니다. 인그레스를 통해 더 다양한 요구사항을 처리할 수 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;인그레스 도입시 활용가능한 기능은 다음과 같습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 호스트라우팅&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 카나리 배포전략&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 애플리케이션 계층 구성&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;하지만, 인그레스는 앞으로 추가적인 개발이 없을 예정입니다. 인그레스를 대체할 리소스는 Gateway API 입니다. Ingress를 잘 알고 Gateway API로 잘 migration하여 즐거운 쿠버네티스 삶이 되시길 바랍니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;감사합니다.&lt;/p&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;</description>
      <category>스터디</category>
      <category>ingress</category>
      <category>k8s</category>
      <category>kubernetes</category>
      <author>엔지니어-여리</author>
      <guid isPermaLink="true">https://yeoli-tech.tistory.com/48</guid>
      <comments>https://yeoli-tech.tistory.com/48#entry48comment</comments>
      <pubDate>Sat, 12 Oct 2024 17:23:28 +0900</pubDate>
    </item>
    <item>
      <title>[KANS 3기] 5주차 MetalLB</title>
      <link>https://yeoli-tech.tistory.com/47</link>
      <description>&lt;h2 data-ke-size=&quot;size26&quot;&gt;LoadBalancer 타입 Service&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;서비스는  분산된 애플리케이션의 단일 외부 엔드포인트를 노출할 수 있도록 해줍니다. 서비스 유형은 Cluster IP, NodePort, LoadBalancer, ExternalName 등이 있습니다.&amp;nbsp; 이중 ClusterIP는 클러스터 내부에서만 서비스에 접근 가능하고 NodePort는 각 노드와 포트 ip를 통해 외부에서 접근 가능합니다. 클러스터 외부에 노출시키기에 우아한 방법은 아닙니다. LoadBalancer 유형의 서비스는 외부의 로드밸런서를 이용하여 클러스터의 서비스를 외부에 노출시키는 유형입니다. 이번 시간에는 로드밸런서 타입의 서비스에 대해서 살펴보도록 하겠습니다.&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&amp;nbsp;&lt;/h2&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&amp;nbsp;&lt;/h2&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;실습환경 구성하기&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;실습환경 구성에서 이전 포스팅과 동일한 부분은 생략하고 차이가 있는 부분만 다루겠습니다.&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;인스턴스 구성&lt;/h3&gt;
&lt;pre id=&quot;code_1728087177336&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;# in AWS 

# ec2 서비스에서 key-pair 를 생성 후 다운로드 받습니다.
# cloudformation 서비스에서 template를 아래 url로 설정 후 stack을 생성합니다.
 https://s3.ap-northeast-2.amazonaws.com/cloudformation.cloudneta.net/kans/kans-5w.yaml # 실습 cloudformation 파일을 다운로드 받습니다.



# in cli

STACK_NAME=mylab
KEY_PAIR=yeoli
PROFILE=lab

curl -O https://s3.ap-northeast-2.amazonaws.com/cloudformation.cloudneta.net/kans/kans-5w.yaml # 실습 cloudformation 파일을 다운로드 받습니다.
 aws cloudformation deploy \
  --template-file kans-5w.yaml \
  --stack-name $STACK_NAME \
  --parameter-overrides \
    KeyName=$KEY_PAIR \
    SgIngressSshCidr=$(curl -s ipinfo.io/ip)/32 \
  --region ap-northeast-2 \
  --profile $PROFILE
  
  
# ec2 인스턴스의 userdata에는 다음 항목이 포함되어 있습니다.

# hostname 변경
# ufw 방화벽 해제
# kind 설치
# 도커 엔진 설치
# alias 설정
# kubectl, helm, kubectx, kubens, kubeps
# kubectl 자동완성
# 리소스 제한 상승&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;클러스터 구성&lt;/h3&gt;
&lt;pre id=&quot;code_1728136210159&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;cat &amp;lt;&amp;lt;EOT&amp;gt; kind-svc-2w.yaml
kind: Cluster
apiVersion: kind.x-k8s.io/v1alpha4
featureGates:
  &quot;InPlacePodVerticalScaling&quot;: true  #실행 중인 파드의 리소스 요청 및 제한을 변경할 수 있게 합니다.
  &quot;MultiCIDRServiceAllocator&quot;: true  #서비스에 대해 여러 CIDR 블록을 사용할 수 있게 합니다.
nodes:
- role: control-plane
  labels:
    mynode: control-plane
    topology.kubernetes.io/zone: ap-northeast-2a
  extraPortMappings:  #컨테이너 포트를 호스트 포트에 매핑하여 클러스터 외부에서 서비스에 접근할 수 있도록 합니다.
  - containerPort: 30000
    hostPort: 30000
  - containerPort: 30001
    hostPort: 30001
  - containerPort: 30002
    hostPort: 30002
  - containerPort: 30003
    hostPort: 30003
  - containerPort: 30004
    hostPort: 30004
  kubeadmConfigPatches:
  - |
    kind: ClusterConfiguration
    apiServer:
      extraArgs:  #API 서버에 추가 인수를 제공
        runtime-config: api/all=true  #모든 API 버전을 활성화
    controllerManager:
      extraArgs:
        bind-address: 0.0.0.0
    etcd:
      local:
        extraArgs:
          listen-metrics-urls: http://0.0.0.0:2381
    scheduler:
      extraArgs:
        bind-address: 0.0.0.0
  - |
    kind: KubeProxyConfiguration
    metricsBindAddress: 0.0.0.0
- role: worker
  labels:
    mynode: worker1
    topology.kubernetes.io/zone: ap-northeast-2a
- role: worker
  labels:
    mynode: worker2
    topology.kubernetes.io/zone: ap-northeast-2b
- role: worker
  labels:
    mynode: worker3
    topology.kubernetes.io/zone: ap-northeast-2c
networking:
  podSubnet: 10.10.0.0/16  #파드 IP를 위한 CIDR 범위를 정의합니다. 파드는 이 범위에서 IP를 할당받습니다.
  serviceSubnet: 10.200.1.0/24  #서비스 IP를 위한 CIDR 범위를 정의합니다. 서비스는 이 범위에서 IP를 할당받습니다.
EOT



# k8s 클러스터 설치
kind create cluster --config kind-svc-2w.yaml --name myk8s --image kindest/node:v1.31.0
docker ps



# 노드에 기본 툴 설치
docker exec -it myk8s-control-plane sh -c 'apt update &amp;amp;&amp;amp; apt install tree psmisc lsof wget bsdmainutils bridge-utils net-tools dnsutils ipset ipvsadm nfacct tcpdump ngrep iputils-ping arping git vim arp-scan -y'
for i in worker worker2 worker3; do echo &quot;&amp;gt;&amp;gt; node myk8s-$i &amp;lt;&amp;lt;&quot;; docker exec -it myk8s-$i sh -c 'apt update &amp;amp;&amp;amp; apt install tree psmisc lsof wget bsdmainutils bridge-utils net-tools dnsutils ipset ipvsadm nfacct tcpdump ngrep iputils-ping arping -y'; echo; done&lt;/code&gt;&lt;/pre&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;h3 data-ke-size=&quot;size23&quot;&gt;노드별 네트워크 정보 확인&lt;/h3&gt;
&lt;pre id=&quot;code_1728136234569&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;for i in control-plane worker worker2 worker3; do echo &quot;&amp;gt;&amp;gt; node myk8s-$i &amp;lt;&amp;lt;&quot;; docker exec -it myk8s-$i cat /etc/cni/net.d/10-kindnet.conflist; echo; done
for i in control-plane worker worker2 worker3; do echo &quot;&amp;gt;&amp;gt; node myk8s-$i &amp;lt;&amp;lt;&quot;; docker exec -it myk8s-$i ip -c route; echo; done
for i in control-plane worker worker2 worker3; do echo &quot;&amp;gt;&amp;gt; node myk8s-$i &amp;lt;&amp;lt;&quot;; docker exec -it myk8s-$i ip -c addr; echo; done&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1. 클러스터에 포함된 노드들의 CNI 정보를 조회합니다. kindnet을 CNI로 사용합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2. 각 노드의 routing table을 조회합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;3. 각노드의 ip 주소 정보를 조회합니다.&lt;/p&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;h3 data-ke-size=&quot;size23&quot;&gt;iptables 정보 확인&lt;/h3&gt;
&lt;pre id=&quot;code_1728136251037&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;for i in filter nat mangle raw ; do echo &quot;&amp;gt;&amp;gt; IPTables Type : $i &amp;lt;&amp;lt;&quot;; docker exec -it myk8s-control-plane  iptables -t $i -S ; echo; done
for i in filter nat mangle raw ; do echo &quot;&amp;gt;&amp;gt; IPTables Type : $i &amp;lt;&amp;lt;&quot;; docker exec -it myk8s-worker  iptables -t $i -S ; echo; done
for i in filter nat mangle raw ; do echo &quot;&amp;gt;&amp;gt; IPTables Type : $i &amp;lt;&amp;lt;&quot;; docker exec -it myk8s-worker2 iptables -t $i -S ; echo; done
for i in filter nat mangle raw ; do echo &quot;&amp;gt;&amp;gt; IPTables Type : $i &amp;lt;&amp;lt;&quot;; docker exec -it myk8s-worker3 iptables -t $i -S ; echo; done&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;선택된 노드에 대해서 iptables 프로그램으로 각 테이블(filter, nat, mangle, raw)에 대해 조회해서 확인합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1728136915861&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;docker ps -q | xargs docker inspect --format '{{.Name}} {{.NetworkSettings.Networks.kind.IPAddress}}'&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;명령어를 살펴보면 현재 실행중인 파드의 네트워크 정보를 확인하는 명령어 입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그리고, docker network inspect kind 명령어로 kind 네트워크 인터페이스의 정보를 확인해보면 다음과 같습니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2024-10-05 오후 11.00.38.png&quot; data-origin-width=&quot;1191&quot; data-origin-height=&quot;1143&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bpnEx4/btsJU2tRWJv/GP4zumUNe1khxyplxxudZ0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bpnEx4/btsJU2tRWJv/GP4zumUNe1khxyplxxudZ0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bpnEx4/btsJU2tRWJv/GP4zumUNe1khxyplxxudZ0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbpnEx4%2FbtsJU2tRWJv%2FGP4zumUNe1khxyplxxudZ0%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;1191&quot; height=&quot;1143&quot; data-filename=&quot;스크린샷 2024-10-05 오후 11.00.38.png&quot; data-origin-width=&quot;1191&quot; data-origin-height=&quot;1143&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;결국, 4개의 도커 컨테이너 (kind node)는 kind라는 도커 네트워크를 공유하여 네트워크 내에서 ip를 할당받았다는 것을 알 수 있습니다. 이는 각 노드 사이에는 통신이 가능하다는 점을 시사합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;로드밸런서 타입&lt;/h2&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;로드밸런서 타입의 서비스는 앞서 설명한 것과 같이 외부의 로드밸런서를 사용하여 서비스를 외부로 노출시킵니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;쿠버네티스에서는 로드밸런스 타입 서비스를 직접 제공하지는 않습니다. AWS와 같은 CSP에서 제공하는 로드 밸런서 혹은 LoxiLB, MetalLB와 같은 오픈소스를 사용하여 로드밸런서 타입 서비스를 사용할 수 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;김경보님의 블로그에는 온프레미스 혹은 클라우드 환경에서의 로드밸런서 혹은 클라우드 내에서 로드밸런서 타입의 서비스의 작동 방식에 대해 잘 기술되어 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;a href=&quot;https://kimalarm.tistory.com/102&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://kimalarm.tistory.com/102&lt;/a&gt;&lt;/p&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;734&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/3yEcu/btsJVs6KlZp/fkrkv6oKACRpFFDzg2mV2k/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/3yEcu/btsJVs6KlZp/fkrkv6oKACRpFFDzg2mV2k/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/3yEcu/btsJVs6KlZp/fkrkv6oKACRpFFDzg2mV2k/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F3yEcu%2FbtsJVs6KlZp%2Ffkrkv6oKACRpFFDzg2mV2k%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;734&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;734&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&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;728&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/SbnBE/btsJWhQIdmg/ZE3sDAMC6WlQlx9hHWsDzk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/SbnBE/btsJWhQIdmg/ZE3sDAMC6WlQlx9hHWsDzk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/SbnBE/btsJWhQIdmg/ZE3sDAMC6WlQlx9hHWsDzk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FSbnBE%2FbtsJWhQIdmg%2FZE3sDAMC6WlQlx9hHWsDzk%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;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;CSP의 로드밸런서는 2가지 방식으로 동작합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1.NodePort 접근 방식은 로드밸런서로 들어온 요청을 노드포트를 거친 후 목적지 application pod로 전달하는 방식입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2. pod direct 접근 방식은 로드밸런서로 들어온 요청을 목적지 application pod로 직접 전달하는 방식입니다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;MetalLB 에 대하여&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;MetalLB는 BareMetal LoadBalancer의 약자입니다. 이름에서 보시다시피&amp;nbsp;MetalLB는 베어메탈 쿠버네티스 클러스터를 위한 로드밸런서입니다. MetalLB는 2가지 모드를 제공합니다. Layer2 모드와 BGP 모드를 제공합니다. 베어메탈 환경이 목적이기 때문에 대부분의 클라우드 환경에서는 호환되지 않을 수 있습니다. 또한, 일부 CNI와 연동에 문제가 있을 수 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://metallb.universe.tf/configuration/calico/&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://metallb.universe.tf/configuration/calico/&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1728142085834&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;article&quot; data-og-title=&quot;Issues with Calico :: MetalLB, bare metal load-balancer for Kubernetes&quot; data-og-description=&quot;The easy way As of Calico 3.18 (from early 2021), Calico now supports limited integration with MetalLB. Calico can be configured to announce the LoadBalancer IPs via BGP. Simply run MetalLB, apply an IPAddressPool without any BGPAdvertisement CR. When usin&quot; data-og-host=&quot;metallb.universe.tf&quot; data-og-source-url=&quot;https://metallb.universe.tf/configuration/calico/&quot; data-og-url=&quot;https://metallb.universe.tf/configuration/calico/index.html&quot; data-og-image=&quot;&quot;&gt;&lt;a href=&quot;https://metallb.universe.tf/configuration/calico/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://metallb.universe.tf/configuration/calico/&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url();&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;Issues with Calico :: MetalLB, bare metal load-balancer for Kubernetes&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;The easy way As of Calico 3.18 (from early 2021), Calico now supports limited integration with MetalLB. Calico can be configured to announce the LoadBalancer IPs via BGP. Simply run MetalLB, apply an IPAddressPool without any BGPAdvertisement CR. When usin&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;metallb.universe.tf&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;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;h3 data-ke-size=&quot;size23&quot;&gt;MetalLB 구성시 동작 순서&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1. 로드밸런서 서비스 리소스를 생성하면 스피커 파드를 데몬셋 형태로 생성합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2. 스피커 파드중 리더가 선출됩니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;3. 리더 파드는 External IP를 전파합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;4. External IP 전파를 위해 ARP 혹은 BGP 프로토콜을 사용합니다. 여기서 MetalLB의 2가지 모드가 구분됩니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;Layer2 모드&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;ARP 프로토콜을 사용하는 모드를 Layer2 모드라고 합니다.&amp;nbsp; Layer2 모드에서는 External IP를 전파할 때 ARP 프로토콜을 통해서 전파합니다. 동일한 내부 네트워크에서 통신을 위해서는 목적지의 MAC 주소를 알아야합니다. ARP 프로토콜을 통하면 목적지 IP에 해당하는 MAC 주소를 요청하여 알수 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2024-10-06 오전 12.17.49.png&quot; data-origin-width=&quot;2110&quot; data-origin-height=&quot;830&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/Acc1L/btsJWTV19Ro/xVI3jeZ72UZFKJBunkjCUK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/Acc1L/btsJWTV19Ro/xVI3jeZ72UZFKJBunkjCUK/img.png&quot; data-alt=&quot;가시다님 제공&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/Acc1L/btsJWTV19Ro/xVI3jeZ72UZFKJBunkjCUK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FAcc1L%2FbtsJWTV19Ro%2FxVI3jeZ72UZFKJBunkjCUK%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;2110&quot; height=&quot;830&quot; data-filename=&quot;스크린샷 2024-10-06 오전 12.17.49.png&quot; data-origin-width=&quot;2110&quot; data-origin-height=&quot;830&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;가시다님 제공&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;위 그림에서는 노드1의 스피커파드가 리더 파드입니다. SVC1 의 External IP로 접속하게 되면 노드1의 iptables 규칙을 통해 목적지 파드를 찾아 요청이 적절히 전달될 수 있습니다. 이때 1번 노드의 스피커 파드에 장애가 발생하면 나머지 스피커 파드 중에서 다시 리더를 선출합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;BGP 모드&lt;/h3&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1296&quot; data-origin-height=&quot;882&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/d3yZ0t/btsJW1GmTtP/ldeavrXAkq9gK3QTqKQGl1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/d3yZ0t/btsJW1GmTtP/ldeavrXAkq9gK3QTqKQGl1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/d3yZ0t/btsJW1GmTtP/ldeavrXAkq9gK3QTqKQGl1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fd3yZ0t%2FbtsJW1GmTtP%2FldeavrXAkq9gK3QTqKQGl1%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;1296&quot; height=&quot;882&quot; data-origin-width=&quot;1296&quot; data-origin-height=&quot;882&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;BGP 모드로 MetalLB를 구성하게되면, 스피커 파드는 BGP로 External IP를 전파하고, 외부 라우터를 통해 ECMP 라우팅으로 요청을 분산합니다. 앞서 설명한 Layer2 모드에 비해 더 규모가 있고 복잡하고 네트워크 팀 협조가 가능할 때 유용한 모드입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;MetalLB 구성하기&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://metallb.universe.tf/installation/&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://metallb.universe.tf/installation/ 문서를 참고하였습니다.&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1728142913721&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;Installation :: MetalLB, bare metal load-balancer for Kubernetes&quot; data-og-description=&quot;Before starting with installation, make sure you meet all the requirements. In particular, you should pay attention to network addon compatibility. If you&amp;rsquo;re trying to run MetalLB on a cloud platform, you should also look at the cloud compatibility page &quot; data-og-host=&quot;metallb.universe.tf&quot; data-og-source-url=&quot;https://metallb.universe.tf/installation/&quot; data-og-url=&quot;https://metallb.universe.tf/installation/index.html&quot; data-og-image=&quot;&quot;&gt;&lt;a href=&quot;https://metallb.universe.tf/installation/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://metallb.universe.tf/installation/&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url();&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;Installation :: MetalLB, bare metal load-balancer for Kubernetes&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;Before starting with installation, make sure you meet all the requirements. In particular, you should pay attention to network addon compatibility. If you&amp;rsquo;re trying to run MetalLB on a cloud platform, you should also look at the cloud compatibility page&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;metallb.universe.tf&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;공식문서에 MetalLB를 구성하는 아주 간단한 방법이 나와있어 인용하였습니다.&lt;/p&gt;
&lt;pre id=&quot;code_1728142892769&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;# MetalLB native 구성
kubectl apply -f https://raw.githubusercontent.com/metallb/metallb/refs/heads/main/config/manifests/metallb-native-prometheus.yaml
 
 
# 리소스 확인
watch -d n 1 'kubectl get all,configmap,secret,ep -n metallb-system  -o wide'&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2024-10-06 오전 1.13.26.png&quot; data-origin-width=&quot;1957&quot; data-origin-height=&quot;588&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cESW01/btsJVKF5PtK/etQw23SQEgfIlu37s1MVVk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cESW01/btsJVKF5PtK/etQw23SQEgfIlu37s1MVVk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cESW01/btsJVKF5PtK/etQw23SQEgfIlu37s1MVVk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcESW01%2FbtsJVKF5PtK%2FetQw23SQEgfIlu37s1MVVk%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;1957&quot; height=&quot;588&quot; data-filename=&quot;스크린샷 2024-10-06 오전 1.13.26.png&quot; data-origin-width=&quot;1957&quot; data-origin-height=&quot;588&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;ConfigMap 구성&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;다음으로 할 작업은 MetalLB가 External IP로 사용할 영역을 지정하고 설정해주는 일입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;IPAddress Pool 생성&lt;/p&gt;
&lt;pre id=&quot;code_1728145191460&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;cat &amp;lt;&amp;lt;EOF | kubectl apply -f -
apiVersion: metallb.io/v1beta1
kind: IPAddressPool
metadata:
  name: my-ippool
  namespace: metallb-system
spec:
  addresses:
  - 172.18.255.200-172.18.255.250
EOF&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;L2advertisements 생성&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;L2 모드로 LoadBalancer IP로 사용하도록 허용하는 내용을 생성합니다.&lt;/p&gt;
&lt;pre id=&quot;code_1728145294657&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;kubectl explain l2advertisements.metallb.io

cat &amp;lt;&amp;lt;EOF | kubectl apply -f -
apiVersion: metallb.io/v1beta1
kind: L2Advertisement
metadata:
  name: my-l2-advertise
  namespace: metallb-system
spec:
  ipAddressPools:
  - my-ippool
EOF&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;아래와 같이 구성할 수 있습니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2024-10-06 오전 1.22.06.png&quot; data-origin-width=&quot;475&quot; data-origin-height=&quot;368&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/S3uaI/btsJWvnEfXD/gk7re66P2KHgZeVM5EesTK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/S3uaI/btsJWvnEfXD/gk7re66P2KHgZeVM5EesTK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/S3uaI/btsJWvnEfXD/gk7re66P2KHgZeVM5EesTK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FS3uaI%2FbtsJWvnEfXD%2Fgk7re66P2KHgZeVM5EesTK%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;475&quot; height=&quot;368&quot; data-filename=&quot;스크린샷 2024-10-06 오전 1.22.06.png&quot; data-origin-width=&quot;475&quot; data-origin-height=&quot;368&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&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 data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;서비스 생성&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;3개의 서비스를 생성해보면 다음과 같이 kubectl get svc 명령어로 확인해볼 수 있습니다. 각 노드의 external IP가 노드의 스피커파드 IP로 구성되어 있습니다.&amp;nbsp;&lt;/p&gt;
&lt;figure data-ke-type=&quot;image&quot; data-ke-style=&quot;alignCenter&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;
&lt;figcaption style=&quot;display: none;&quot;&gt;&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;636&quot; data-origin-height=&quot;823&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/rvyCJ/btsJVGjEH8t/oQbLZ9m9dz0gyJm3F5f6tk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/rvyCJ/btsJVGjEH8t/oQbLZ9m9dz0gyJm3F5f6tk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/rvyCJ/btsJVGjEH8t/oQbLZ9m9dz0gyJm3F5f6tk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FrvyCJ%2FbtsJVGjEH8t%2FoQbLZ9m9dz0gyJm3F5f6tk%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;636&quot; height=&quot;823&quot; data-origin-width=&quot;636&quot; data-origin-height=&quot;823&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&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 data-ke-size=&quot;size16&quot;&gt;또한 로드밸런서 서비스 타입은 노드포트 타입을 포함하기 때문에 아래와 같이 allocateLoadBalancerNodePorts 값이 true로 설정되어 있습니다. 이를 false로 변경해 노드포트 32258 (svc1 기준) 를 사용하지 않고 80포트를 통해 요청할 수 있습니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;534&quot; data-origin-height=&quot;854&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/lhQhC/btsJV1U5t7Z/L329fksVwpgkBATeaip8e1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/lhQhC/btsJV1U5t7Z/L329fksVwpgkBATeaip8e1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/lhQhC/btsJV1U5t7Z/L329fksVwpgkBATeaip8e1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FlhQhC%2FbtsJV1U5t7Z%2FL329fksVwpgkBATeaip8e1%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;534&quot; height=&quot;854&quot; data-origin-width=&quot;534&quot; data-origin-height=&quot;854&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;서비스를 활용하여 외부에서 접근&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;각 서비스의 external IP를 변수로 설정합니다.&lt;/p&gt;
&lt;pre id=&quot;code_1728146823011&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;SVC1EXIP=$(kubectl get svc svc1 -o jsonpath='{.status.loadBalancer.ingress[0].ip}')
SVC2EXIP=$(kubectl get svc svc2 -o jsonpath='{.status.loadBalancer.ingress[0].ip}')
SVC3EXIP=$(kubectl get svc svc3 -o jsonpath='{.status.loadBalancer.ingress[0].ip}')&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;br /&gt;이후, 테스트 컨테이너에서 각 서비스의 externalIP에 대해&amp;nbsp; 각각 curl 요청을 보내어 확인합니다.&lt;/p&gt;
&lt;pre id=&quot;code_1728146701539&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;for i in $SVC1EXIP $SVC2EXIP $SVC3EXIP; do docker exec -it mypc curl -s $i | grep Hostname ; done&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2024-10-06 오전 1.45.09.png&quot; data-origin-width=&quot;159&quot; data-origin-height=&quot;57&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/z3lbX/btsJW5IJaLV/SHzSbpMwmWlLgKZsokGLG0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/z3lbX/btsJW5IJaLV/SHzSbpMwmWlLgKZsokGLG0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/z3lbX/btsJW5IJaLV/SHzSbpMwmWlLgKZsokGLG0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fz3lbX%2FbtsJW5IJaLV%2FSHzSbpMwmWlLgKZsokGLG0%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;159&quot; height=&quot;57&quot; data-filename=&quot;스크린샷 2024-10-06 오전 1.45.09.png&quot; data-origin-width=&quot;159&quot; data-origin-height=&quot;57&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&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 data-ke-size=&quot;size16&quot;&gt;정보를 더욱 상세하게 표기하도록 코드를 수정하여 테스트 합니다.&lt;/p&gt;
&lt;pre id=&quot;code_1728146763616&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;for i in $SVC1EXIP $SVC2EXIP $SVC3EXIP; do echo &quot;&amp;gt;&amp;gt; Access Service External-IP : $i &amp;lt;&amp;lt;&quot; ;docker exec -it mypc curl -s $i | egrep 'Hostname|RemoteAddr|Host:' ; echo ; done&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2024-10-06 오전 1.46.15.png&quot; data-origin-width=&quot;416&quot; data-origin-height=&quot;231&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/c0Bvjn/btsJWfL4AHU/hjmJLfFcUuZ3id4CwwNgH0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/c0Bvjn/btsJWfL4AHU/hjmJLfFcUuZ3id4CwwNgH0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/c0Bvjn/btsJWfL4AHU/hjmJLfFcUuZ3id4CwwNgH0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fc0Bvjn%2FbtsJWfL4AHU%2FhjmJLfFcUuZ3id4CwwNgH0%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;416&quot; height=&quot;231&quot; data-filename=&quot;스크린샷 2024-10-06 오전 1.46.15.png&quot; data-origin-width=&quot;416&quot; data-origin-height=&quot;231&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;External IP로 요청하는 걸 확인하였습니다.&lt;/p&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 data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;후기&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;스터디에서 다루는 내용들을 따라가기 위해서 별도로 네트워크 공부를 하지만 부족함이 많은 것 같습니다. 지금 다 이해 못한다면 두번이고 세번이고 보면서 이해해야겠습니다. 항상 알찬 내용을 준비해주시는 분들과 어렵고 복잡한 과제들을 해네는 동료분들이 늘 저를 이끄는 동기부여가 됩니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;읽어주셔서 감사합니다.&lt;/p&gt;</description>
      <category>스터디</category>
      <author>엔지니어-여리</author>
      <guid isPermaLink="true">https://yeoli-tech.tistory.com/47</guid>
      <comments>https://yeoli-tech.tistory.com/47#entry47comment</comments>
      <pubDate>Sat, 5 Oct 2024 16:49:01 +0900</pubDate>
    </item>
    <item>
      <title>KCD 참석후기 - 쿠버네티스에서 스케줄링 작동 방식</title>
      <link>https://yeoli-tech.tistory.com/46</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;안녕하세요. 이 글은 2024년 9월 24일 Cloud Native Korea Community Day 2024에 참석한 후기를 담고 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;가장 인상적이었던 주제는 쿠버네티스 스케줄러에 관한 내용이었습니다. 이번 글에서는 쿠버네티스 scheduling에 대한 내용 및 1.30버전부터 GA된 scheduling gate에 대해 다뤄보고자 합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;scheduler가 하는 일&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;scheduler는 3가지 일을 합니다. scheduling, preemption, eviction 입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- scheduling은 신규 pod 생성을 말합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- preemption은 더 우선순위가 높은 pod를 생성하기 위해 우선순위가 낮은 pod를 삭제하는 것을 말합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- eviction은 &lt;span style=&quot;background-color: #ffffff; color: #222222; text-align: left;&quot;&gt;리소스가 부족한 노드에서 pod를 삭제하는 것을 말합니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이중 오늘은 scheduling이 어떻게 동작하는지 다뤄보고자 합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style1&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;스케줄링은 kubelet이 파드를 실행할 수 있도록 파드가 노드에 적합한지 확인하는 일을 말합니다.&lt;/span&gt;&lt;/blockquote&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&amp;nbsp;&lt;/h3&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;kube-scheduler&amp;nbsp;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;쿠버네티스의 기본 스케줄러이고, 컨트롤 플레인의 일부입니다. 스케줄러는 이름에서 알다시피 스케줄링을 합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;스케줄링은 앞에서 말한 것과 같이 새로운 pod를 생성합니다. 물론 pod는 어떤 노드에 배포되어야 합니다. 결국 pod가 어떤 노드에 배포되어야 하는지 결정한다고 볼 수 있습니다. kube-scheduler는 2가지 단계로 파드가 생성될 노드를 선택합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&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;527&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/baBLik/btsJPTprmDq/yqRmzvDgvdzZh2us1XCfCK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/baBLik/btsJPTprmDq/yqRmzvDgvdzZh2us1XCfCK/img.png&quot; data-alt=&quot;scheduling framework&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/baBLik/btsJPTprmDq/yqRmzvDgvdzZh2us1XCfCK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbaBLik%2FbtsJPTprmDq%2FyqRmzvDgvdzZh2us1XCfCK%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;527&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;527&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;scheduling framework&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1. filtering: 필터링은 pod를 스케줄링 할 수 있는 노드 셋을 찾는 작업입니다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2. scoring: 스코어링은 선택된 노드 셋중에 실제로 pod가 배포될 노드를 찾는 작업입니다.&lt;/p&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;amp; 스코어링을 해야하는지 결정할 수 있습니다. 이는 스케줄러의 성능 최적화를 말합니다. percentageOfNodesToScore 옵션의 값으로 정의합니다. 0~100 사이의 값으로 설정가능합니다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;percentageOfNodesToScore의 값의 기본 값은 워커노드가 늘어날수록 선형적으로 감소됩니다. 50에서부터 감소되어서 최소 수치는 5입니다.&lt;/p&gt;
&lt;pre id=&quot;code_1727536697746&quot; class=&quot;go&quot; data-ke-language=&quot;go&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// WithPercentageOfNodesToScore sets percentageOfNodesToScore for Scheduler.
// The default value of 0 will use an adaptive percentage: 50 - (num of nodes)/125.
func WithPercentageOfNodesToScore(percentageOfNodesToScore *int32) Option {
	return func(o *schedulerOptions) {
		if percentageOfNodesToScore != nil {
			o.percentageOfNodesToScore = *percentageOfNodesToScore
		}
	}
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;a href=&quot;https://github.com/kubernetes/kubernetes/blob/master/pkg/scheduler/scheduler.go&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://github.com/kubernetes/kubernetes/blob/master/pkg/scheduler/scheduler.go&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1727536773968&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;object&quot; data-og-title=&quot;kubernetes/pkg/scheduler/scheduler.go at master &amp;middot; kubernetes/kubernetes&quot; data-og-description=&quot;Production-Grade Container Scheduling and Management - kubernetes/kubernetes&quot; data-og-host=&quot;github.com&quot; data-og-source-url=&quot;https://github.com/kubernetes/kubernetes/blob/master/pkg/scheduler/scheduler.go&quot; data-og-url=&quot;https://github.com/kubernetes/kubernetes/blob/master/pkg/scheduler/scheduler.go&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/djd1YQ/hyW6LFrpZu/IhnSm7zwNECk2qvSWF1kc0/img.png?width=1200&amp;amp;height=600&amp;amp;face=0_0_1200_600,https://scrap.kakaocdn.net/dn/bwX1aO/hyXaFcsDG0/YlYENu1Kbr4jnKq2wKWGvK/img.png?width=1200&amp;amp;height=600&amp;amp;face=0_0_1200_600&quot;&gt;&lt;a href=&quot;https://github.com/kubernetes/kubernetes/blob/master/pkg/scheduler/scheduler.go&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://github.com/kubernetes/kubernetes/blob/master/pkg/scheduler/scheduler.go&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/djd1YQ/hyW6LFrpZu/IhnSm7zwNECk2qvSWF1kc0/img.png?width=1200&amp;amp;height=600&amp;amp;face=0_0_1200_600,https://scrap.kakaocdn.net/dn/bwX1aO/hyXaFcsDG0/YlYENu1Kbr4jnKq2wKWGvK/img.png?width=1200&amp;amp;height=600&amp;amp;face=0_0_1200_600');&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;kubernetes/pkg/scheduler/scheduler.go at master &amp;middot; kubernetes/kubernetes&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;Production-Grade Container Scheduling and Management - kubernetes/kubernetes&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;github.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;h3 data-ke-size=&quot;size23&quot;&gt;필터링&lt;/h3&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2024-09-28 오후 11.34.12.png&quot; data-origin-width=&quot;1094&quot; data-origin-height=&quot;1102&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/q2MBt/btsJRqzqgMD/vkMQkR5HSGCEwsZP5iUdmk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/q2MBt/btsJRqzqgMD/vkMQkR5HSGCEwsZP5iUdmk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/q2MBt/btsJRqzqgMD/vkMQkR5HSGCEwsZP5iUdmk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fq2MBt%2FbtsJRqzqgMD%2FvkMQkR5HSGCEwsZP5iUdmk%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;1094&quot; height=&quot;1102&quot; data-filename=&quot;스크린샷 2024-09-28 오후 11.34.12.png&quot; data-origin-width=&quot;1094&quot; data-origin-height=&quot;1102&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;필터링에서는 어떤 노드를 선택할지를 결정하는 단계라고 이해할 수 있습니다. taint, toleration, affinity, resource availability 등에 따라서 현재 파드가 배포가될 수 있는지 여부를 확인하는 단계입니다. 이를 통해서 선택된 워커노드 목록중 파드가 배포될 수 있는 파드를 (말그대로) 필터링 한다고 생각할 수 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;만약 필터링 결과로 노드가 1개만 선택된 경우 스코어링을 하지 않고 바로 해당 노드에 pod가 생성됩니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;스코어링&lt;/h3&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2024-09-28 오후 11.34.24.png&quot; data-origin-width=&quot;938&quot; data-origin-height=&quot;828&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/XOqHA/btsJQ4wDoc1/4lNFccKsBzpFzSz8mMWecK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/XOqHA/btsJQ4wDoc1/4lNFccKsBzpFzSz8mMWecK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/XOqHA/btsJQ4wDoc1/4lNFccKsBzpFzSz8mMWecK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FXOqHA%2FbtsJQ4wDoc1%2F4lNFccKsBzpFzSz8mMWecK%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;938&quot; height=&quot;828&quot; data-filename=&quot;스크린샷 2024-09-28 오후 11.34.24.png&quot; data-origin-width=&quot;938&quot; data-origin-height=&quot;828&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;위 그림을 보기 편하도록 표로 정리해보았습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;score는 아래 표와 같이 매겨집니다.&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 31.0465%;&quot; border=&quot;1&quot; data-ke-style=&quot;style12&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 14.9612%;&quot;&gt;구분&lt;/td&gt;
&lt;td style=&quot;width: 1.16279%;&quot;&gt;점수&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 14.9612%;&quot;&gt;TaintToleration&lt;/td&gt;
&lt;td style=&quot;width: 1.16279%;&quot;&gt;3&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 14.9612%;&quot;&gt;NodeAffinity&lt;/td&gt;
&lt;td style=&quot;width: 1.16279%;&quot;&gt;2&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 14.9612%;&quot;&gt;PodTopologySpread&lt;/td&gt;
&lt;td style=&quot;width: 1.16279%;&quot;&gt;2&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 14.9612%;&quot;&gt;InterPodAffinity&lt;/td&gt;
&lt;td style=&quot;width: 1.16279%;&quot;&gt;2&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 14.9612%;&quot;&gt;NodeResourcesFil&lt;/td&gt;
&lt;td style=&quot;width: 1.16279%;&quot;&gt;1&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 14.9612%;&quot;&gt;VolumeBinding&lt;/td&gt;
&lt;td style=&quot;width: 1.16279%;&quot;&gt;1&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 14.9612%;&quot;&gt;NodeResourcesBalancedAllocation&lt;/td&gt;
&lt;td style=&quot;width: 1.16279%;&quot;&gt;1&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 14.9612%;&quot;&gt;ImageLocality&lt;/td&gt;
&lt;td style=&quot;width: 1.16279%;&quot;&gt;1&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;TaintToleration과 NodeAffinity중 TaintToleration이 더 높은 우선순위를 가지고 있음을 알 수 있네요.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;만약, 스코어링을 통해서 같은 점수를 가진 노드가 있다면 kube-scheduler가 임의의 노드를 선택하게됩니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style1&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;왜 이렇게 스케줄링이 복잡한 걸까요?&lt;/span&gt;&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;(개인적인 견해입니다.) 이렇게 생각해보겠습니다. 하나의 클러스터에 데이터플레인을 구성하고 있는 워커노드가 3대 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;여기서 새로운 디플로이먼트셋이 배포되고, 이로 인해 10개의 파드가 생성된다고 했을때 스케줄링은 아주 찰나의 시간만 필요할 것입니다. 이로 인해서 컨트롤 플레인에 큰 부하가 있진 않을 것입니다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;하지만, 워커노드가 2,000대쯤 존재한다고 가정해볼까요? 여기서 동일한 디플로이먼트셋을 배포한다면 스케줄링 과정이 컨트롤 플레인에 얼마나 많은 부하를 가져올까요? 거기다가 파드의 수명 주기에 얼마나 많은 영향을 줄까요?&amp;nbsp; 이로 인해서 파드가 늦게 뜬다면 사용자 경험에 큰 영향을 주지 않을까 합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그래서 현재와 같이 복잡한 스케줄링 방식을 통해 노드가 많더라도 빠른 스케줄링을 제공하지 않는가 합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 style=&quot;background-color: #ffffff; color: #222222; text-align: left;&quot; data-ke-size=&quot;size26&quot;&gt;Pod Scheduling Readiness&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 기능은 v1.26버전부터 베타 기능으로 추가되었고 쿠버네티스 v1.30에서 scheduling gate가 GA 되었습니다. 이 기능은 어떤 용도로 사용될까요 ?&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2024-09-29 오전 1.07.11.png&quot; data-origin-width=&quot;398&quot; data-origin-height=&quot;485&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/5wyh5/btsJPO9DJXM/2KMaVDGufGGt9YqLLjdS2k/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/5wyh5/btsJPO9DJXM/2KMaVDGufGGt9YqLLjdS2k/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/5wyh5/btsJPO9DJXM/2KMaVDGufGGt9YqLLjdS2k/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F5wyh5%2FbtsJPO9DJXM%2F2KMaVDGufGGt9YqLLjdS2k%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;398&quot; height=&quot;485&quot; data-filename=&quot;스크린샷 2024-09-29 오전 1.07.11.png&quot; data-origin-width=&quot;398&quot; data-origin-height=&quot;485&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;먼저 기존의 scheduling은 이렇게 동작합니다. pod 생성 후 스케줄링, 파드 실행의 단계로 이어집니다.&lt;/p&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;blockquote data-ke-size=&quot;size16&quot; data-ke-style=&quot;style1&quot;&gt;여기서 발생하는 문제는 없을까요?&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;모든 노드에 대해서 스케줄링이 되지 않는다면 스케줄링은 완료될 때까지 api 요청을 계속하게 됩니다. 이는 컨트롤 플레인에 큰 영향을 줄 수 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;scheduling gate라는 기능은 다음과 같이 동작합니다. pod의 .spec.schedulingGates를 정의함으로써 scheduling gate가 부여됩니다. .spec.schedulingGates가 정의되면 파드를 생성하되, 스케줄링될 시기를 제어할 수 있습니다. pod의 .spec.schedulingGates를 삭제하면 다시 스케줄링되어 파드가 생성됩니다.&lt;/p&gt;
&lt;pre id=&quot;code_1727540978069&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-deployment
  labels:
    app: nginx
spec:
  replicas: 10
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx
        image: nginx:1.14.2
        ports:
        - containerPort: 80
      schedulingGates:
        - name: gate&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2024-09-29 오전 1.30.10.png&quot; data-origin-width=&quot;619&quot; data-origin-height=&quot;147&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cZgMfL/btsJQD0wKqR/fq6EShuJHexu8JtKUjIgn1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cZgMfL/btsJQD0wKqR/fq6EShuJHexu8JtKUjIgn1/img.png&quot; data-alt=&quot;실행 결과&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cZgMfL/btsJQD0wKqR/fq6EShuJHexu8JtKUjIgn1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcZgMfL%2FbtsJQD0wKqR%2Ffq6EShuJHexu8JtKUjIgn1%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;147&quot; data-filename=&quot;스크린샷 2024-09-29 오전 1.30.10.png&quot; data-origin-width=&quot;619&quot; data-origin-height=&quot;147&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;실행 결과&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2024-09-29 오전 1.31.20.png&quot; data-origin-width=&quot;976&quot; data-origin-height=&quot;191&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/eTG5Lv/btsJPl097BO/ybE0b1eCGm7WaxXBNXg4G0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/eTG5Lv/btsJPl097BO/ybE0b1eCGm7WaxXBNXg4G0/img.png&quot; data-alt=&quot;schedulingGate 삭제 후&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/eTG5Lv/btsJPl097BO/ybE0b1eCGm7WaxXBNXg4G0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FeTG5Lv%2FbtsJPl097BO%2FybE0b1eCGm7WaxXBNXg4G0%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;976&quot; height=&quot;191&quot; data-filename=&quot;스크린샷 2024-09-29 오전 1.31.20.png&quot; data-origin-width=&quot;976&quot; data-origin-height=&quot;191&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;schedulingGate 삭제 후&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;deployment set에서 scheduling gate 태그를 삭제하게 되면 새로운 레플리카 셋으로 파드가 실행됩니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;scheduling gate의 이점&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;-  동적으로 pod의 수명주기를 제어할 수 있다는 점에서 scheduling gate가 사용될 수 있을 것으로 보입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 온프레미스 환경과 같이 워커 노드의 사이즈가 유연하게 변경될 수 없는 경우 불필요한 스케줄링이 발생하지 않을 수 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;scheduling gate 사용 사례&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- gpu 머신과 같은 한정적인 자원을 포함하는 클러스터의 경우, gpu 머신에 해당하는 job을 미리 정의한 뒤 이전 job이 종료될 때 생성해둔 job의 schedulingGate를 삭제하여 동적으로 파드를 할당할 수 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 워크로드 정의(yaml)가 동적으로 스케줄링되어, 노드와 스케줄링이 최적화를 고려할 수 있습니다.&lt;/p&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;h2 data-ke-size=&quot;size26&quot;&gt;참고문헌&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;쿠버네티스 스케줄링 컨셉 &lt;a href=&quot;https://kubernetes.io/ko/docs/concepts/scheduling-eviction/&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;&amp;nbsp;https://kubernetes.io/ko/docs/concepts/scheduling-eviction/&lt;/a&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;쿠버네티스 스케줄링 준비성&amp;nbsp;&lt;a href=&quot;https://kubernetes.io/ko/docs/concepts/scheduling-eviction/pod-scheduling-readiness/&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://kubernetes.io/ko/docs/concepts/scheduling-eviction/pod-scheduling-readiness/&lt;/a&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;쿠버네티스 스케줄링 준비성 개발 티켓 &lt;a href=&quot;https://github.com/kubernetes/enhancements/tree/master/keps/sig-scheduling/3521-pod-scheduling-readiness&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://github.com/kubernetes/enhancements/tree/master/keps/sig-scheduling/3521-pod-scheduling-readiness&lt;/a&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;쿠버네티스 스케줄러 소스코드 &lt;a href=&quot;https://github.com/kubernetes/kubernetes/blob/master/pkg/scheduler/scheduler.go&quot;&gt;https://github.com/kubernetes/kubernetes/blob/master/pkg/scheduler/scheduler.go&lt;/a&gt;&lt;/p&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 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 data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>스터디</category>
      <author>엔지니어-여리</author>
      <guid isPermaLink="true">https://yeoli-tech.tistory.com/46</guid>
      <comments>https://yeoli-tech.tistory.com/46#entry46comment</comments>
      <pubDate>Sat, 28 Sep 2024 22:47:53 +0900</pubDate>
    </item>
    <item>
      <title>[KANS 3기] 3주차 Calico 네트워크 모드와 접근통제(3/3)</title>
      <link>https://yeoli-tech.tistory.com/45</link>
      <description>&lt;h2 data-ke-size=&quot;size26&quot;&gt;Calico 네트워크 모드&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;칼리코는 다양한 네트워크 모드를 제공합니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;2048&quot; data-origin-height=&quot;1345&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cBeKrb/btsJG2tnpS7/FW1dkufjjR75tUsdfFNkpK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cBeKrb/btsJG2tnpS7/FW1dkufjjR75tUsdfFNkpK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cBeKrb/btsJG2tnpS7/FW1dkufjjR75tUsdfFNkpK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcBeKrb%2FbtsJG2tnpS7%2FFW1dkufjjR75tUsdfFNkpK%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;2048&quot; height=&quot;1345&quot; data-origin-width=&quot;2048&quot; data-origin-height=&quot;1345&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&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;h3 data-ke-size=&quot;size23&quot;&gt;IPIP 모드 (기본설정)&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이전 글에서 다뤘던 내용인 만큼 생략하도록 하겠습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://yeoli-tech.tistory.com/44&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://yeoli-tech.tistory.com/44&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1726924364605&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;article&quot; data-og-title=&quot;[KANS 3기] 3주차 Calico CNI (2/3)&quot; data-og-description=&quot;Calico(이하 &amp;rdquo;칼리코&amp;ldquo;) 알아보기Calico에 대한 공식 문서의 설명에 따르면, calico는 네트워크, 보안 솔루션으로 이용된다고 합니다.Calico is a networking and security solution that enables Kubernetes workloads and no&quot; data-og-host=&quot;yeoli-tech.tistory.com&quot; data-og-source-url=&quot;https://yeoli-tech.tistory.com/44&quot; data-og-url=&quot;https://yeoli-tech.tistory.com/44&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/dEZUOX/hyW2PVt5xS/H58QqO8ktzw8RbcklZuLi1/img.png?width=584&amp;amp;height=677&amp;amp;face=0_0_584_677,https://scrap.kakaocdn.net/dn/cNGVaG/hyW2QtlFMo/cAcDKfZdYpeKi7ue629uk1/img.png?width=584&amp;amp;height=677&amp;amp;face=0_0_584_677,https://scrap.kakaocdn.net/dn/XN2Yk/hyW230vLvW/F2yiZiH2PzulBHQBbaTpo1/img.png?width=1082&amp;amp;height=509&amp;amp;face=0_0_1082_509&quot;&gt;&lt;a href=&quot;https://yeoli-tech.tistory.com/44&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://yeoli-tech.tistory.com/44&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/dEZUOX/hyW2PVt5xS/H58QqO8ktzw8RbcklZuLi1/img.png?width=584&amp;amp;height=677&amp;amp;face=0_0_584_677,https://scrap.kakaocdn.net/dn/cNGVaG/hyW2QtlFMo/cAcDKfZdYpeKi7ue629uk1/img.png?width=584&amp;amp;height=677&amp;amp;face=0_0_584_677,https://scrap.kakaocdn.net/dn/XN2Yk/hyW230vLvW/F2yiZiH2PzulBHQBbaTpo1/img.png?width=1082&amp;amp;height=509&amp;amp;face=0_0_1082_509');&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;[KANS 3기] 3주차 Calico CNI (2/3)&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;Calico(이하 &amp;rdquo;칼리코&amp;ldquo;) 알아보기Calico에 대한 공식 문서의 설명에 따르면, calico는 네트워크, 보안 솔루션으로 이용된다고 합니다.Calico is a networking and security solution that enables Kubernetes workloads and no&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;yeoli-tech.tistory.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;p data-ke-size=&quot;size16&quot;&gt;- 같은 노드 내에서는 파드간 통신시 직접 통신합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 다른 노드에서 파드간 통신은 tunl0 인터페이스를 사용하고 IPIP 프로토콜로 통신합니다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 다른 노드의 ip 대역은 BGP로 전달 받은 다음 호스트의 라우팅테이블에 업데이트 됩니다.&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;Direct 모드&lt;/h3&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1184&quot; data-origin-height=&quot;620&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cDCpxz/btsJG3lCcxX/XCCWOpr3JIQMK4JIunWEh1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cDCpxz/btsJG3lCcxX/XCCWOpr3JIQMK4JIunWEh1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cDCpxz/btsJG3lCcxX/XCCWOpr3JIQMK4JIunWEh1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcDCpxz%2FbtsJG3lCcxX%2FXCCWOpr3JIQMK4JIunWEh1%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;1184&quot; height=&quot;620&quot; data-origin-width=&quot;1184&quot; data-origin-height=&quot;620&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- IPIP 모드와 달리 파드 통신이 출발지 노드의 라우팅 정보를 확인해 목적지 노드로 원본 그대로 전달합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- AWS에서 이 모드를 사용하려면 다음과 같이 &lt;span style=&quot;color: #d44c47;&quot; data-token-index=&quot;0&quot;&gt;Source/Destination Check&lt;/span&gt; 기능을 Disable 해야합니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2024-09-21 오후 11.19.21.png&quot; data-origin-width=&quot;623&quot; data-origin-height=&quot;412&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/NIx6L/btsJIqmiRqn/r1ciwPcUK32AYHmtjT2bh0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/NIx6L/btsJIqmiRqn/r1ciwPcUK32AYHmtjT2bh0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/NIx6L/btsJIqmiRqn/r1ciwPcUK32AYHmtjT2bh0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FNIx6L%2FbtsJIqmiRqn%2Fr1ciwPcUK32AYHmtjT2bh0%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;623&quot; height=&quot;412&quot; data-filename=&quot;스크린샷 2024-09-21 오후 11.19.21.png&quot; data-origin-width=&quot;623&quot; data-origin-height=&quot;412&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1726928792337&quot; class=&quot;shell&quot; data-ke-language=&quot;shell&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;# IPIP 모드 비활성화
calicoctl get ippool default-ipv4-ippool -o yaml | sed -e &quot;s/ipipMode: Always/ipipMode: Never/&quot; | calicoctl apply -f - 

# IPIP 모드 활성화
calicoctl get ippool default-ipv4-ippool -o yaml | sed -e &quot;s/ipipMode: Never/ipipMode: Always/&quot; | calicoctl apply -f -&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;VXLAN 모드&lt;/h3&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1184&quot; data-origin-height=&quot;656&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/0xhDY/btsJHUBoYaS/13Gk6sFZtMqcCmKEgKqJL1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/0xhDY/btsJHUBoYaS/13Gk6sFZtMqcCmKEgKqJL1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/0xhDY/btsJHUBoYaS/13Gk6sFZtMqcCmKEgKqJL1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F0xhDY%2FbtsJHUBoYaS%2F13Gk6sFZtMqcCmKEgKqJL1%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;1184&quot; height=&quot;656&quot; data-origin-width=&quot;1184&quot; data-origin-height=&quot;656&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- Flannel CNI에서 한 번 다뤘습니다. &lt;a href=&quot;https://yeoli-tech.tistory.com/42#%EB%AA%A8%EB%93%9Cmode&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://yeoli-tech.tistory.com/42#%EB%AA%A8%EB%93%9Cmode&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1726928915599&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;article&quot; data-og-title=&quot;[KANS 3기] 2주차 스터디 내용 정리&quot; data-og-description=&quot;쿠버네티스 환경 구성하기스터디에서는 각자 환경 (Window, Mac)에서 쿠버네티스 클러스터를 구성했다. 쿠버네티스 클러스터를 구현하기 위해 KIND를 활용했으나 (kind 내용은 다른 스터디원들이나 &quot; data-og-host=&quot;yeoli-tech.tistory.com&quot; data-og-source-url=&quot;https://yeoli-tech.tistory.com/42#%EB%AA%A8%EB%93%9Cmode&quot; data-og-url=&quot;https://yeoli-tech.tistory.com/42&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/ci9nT7/hyW2YEUuCv/c613yWRrzSYIXoNtTkcspk/img.png?width=800&amp;amp;height=603&amp;amp;face=0_0_800_603,https://scrap.kakaocdn.net/dn/bk9KPS/hyW6Go3TCh/wwwpxr4rSbH5UMswANh4w0/img.png?width=800&amp;amp;height=603&amp;amp;face=0_0_800_603,https://scrap.kakaocdn.net/dn/bbqAdb/hyW22tMyrI/noKLw1TWtNr4zV1IJCoaAk/img.png?width=3440&amp;amp;height=985&amp;amp;face=0_0_3440_985&quot;&gt;&lt;a href=&quot;https://yeoli-tech.tistory.com/42#%EB%AA%A8%EB%93%9Cmode&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://yeoli-tech.tistory.com/42#%EB%AA%A8%EB%93%9Cmode&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/ci9nT7/hyW2YEUuCv/c613yWRrzSYIXoNtTkcspk/img.png?width=800&amp;amp;height=603&amp;amp;face=0_0_800_603,https://scrap.kakaocdn.net/dn/bk9KPS/hyW6Go3TCh/wwwpxr4rSbH5UMswANh4w0/img.png?width=800&amp;amp;height=603&amp;amp;face=0_0_800_603,https://scrap.kakaocdn.net/dn/bbqAdb/hyW22tMyrI/noKLw1TWtNr4zV1IJCoaAk/img.png?width=3440&amp;amp;height=985&amp;amp;face=0_0_3440_985');&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;[KANS 3기] 2주차 스터디 내용 정리&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;쿠버네티스 환경 구성하기스터디에서는 각자 환경 (Window, Mac)에서 쿠버네티스 클러스터를 구성했다. 쿠버네티스 클러스터를 구현하기 위해 KIND를 활용했으나 (kind 내용은 다른 스터디원들이나&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;yeoli-tech.tistory.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #d44c47;&quot; data-token-index=&quot;0&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;-&lt;/span&gt; BGP를 사용하지 않고&lt;/span&gt;, VXLAN L3 라우팅을 통해서 동작 합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;Pod 패킷 암호화&lt;/h3&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1184&quot; data-origin-height=&quot;654&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/ldghF/btsJHWsr0an/TKcK4ZUTGxG1RDykpqus6K/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/ldghF/btsJHWsr0an/TKcK4ZUTGxG1RDykpqus6K/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/ldghF/btsJHWsr0an/TKcK4ZUTGxG1RDykpqus6K/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FldghF%2FbtsJHWsr0an%2FTKcK4ZUTGxG1RDykpqus6K%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;1184&quot; height=&quot;654&quot; data-origin-width=&quot;1184&quot; data-origin-height=&quot;654&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 파드간 통신이 암호화되어야 하는 경우에 사용할 수 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 파드간 통신시 wireguard tunnel을 통해 트래픽이 암호화되어 전달됩니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;네트워크 접근 통제&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 네트워크 정책은 클러스터 내부에서 파드간 통신에 대해 트래픽 규칙을 정의하는 걸 말합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 네트워크 정책을 정하지 않는 경우, 모든 파드간에는 서로 통신이 가능합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 네트워크 정책은 기본적으로 &lt;span style=&quot;color: #ee2323;&quot;&gt;차단입니다&lt;/span&gt;.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;네트워크 정책 대상&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 네트워크 정책이 적용될 대상은 다음과 같이 결정될 수 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 특정 pod, 특정 namespace, 특정 ip block&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;912&quot; data-origin-height=&quot;118&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bbk6H8/btsJGIIVxPn/JlGL3y1RTHBEk11fiONJMk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bbk6H8/btsJGIIVxPn/JlGL3y1RTHBEk11fiONJMk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bbk6H8/btsJGIIVxPn/JlGL3y1RTHBEk11fiONJMk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbbk6H8%2FbtsJGIIVxPn%2FJlGL3y1RTHBEk11fiONJMk%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;118&quot; data-origin-width=&quot;912&quot; data-origin-height=&quot;118&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&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;h3 data-ke-size=&quot;size23&quot;&gt;네트워크 정책 예시&lt;/h3&gt;
&lt;pre id=&quot;code_1726929539581&quot; class=&quot;shell&quot; data-ke-language=&quot;shell&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
  name: sample-networkpolicy
  namespace: default # 보안 정책을 생성할 네임스페이스 지정
spec:
  podSelector:
    # 설정할 대상 파드를 여기에 기입
    # 레이블 셀렉터이므로 복수의 파드를 대상으로 할 수 있음.
  policyTypes:
  - Ingress # 인그레이스 룰을 생성하는 경우 명시
  - Egress # 이그레스 룰을 생성할 경우 명시
  ingress:
  - from:
      # 인그레스 룰을 여기에 기입(이그레스 룰과 형식은 동일）
    ports:
      # 이 인그레스 룰로 허가할 수신 포트 번호와 프로토콜 기입
  egress:
  - to:
      # 이그레스 룰을 여기에 기입(인그레스 룰과 형식은 동일）
    ports:
      # 이 이그레스 룰로 허가할 송신 포트 번호와 프로토콜 기입&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;figure data-ke-type=&quot;image&quot; data-ke-style=&quot;alignCenter&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;
&lt;figcaption style=&quot;display: none;&quot;&gt;&lt;/figcaption&gt;
&lt;/figure&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;h2 data-ke-size=&quot;size26&quot;&gt;리소스 정리&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 다쓴 리소스는 꼭 삭제해주세요.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- cloudformation에서 리소스를 삭제하면 됩니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 다 쓴 리소스는 반드시 삭제 후 삭제되었는지 확인해보세요.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2024-09-21 오후 11.46.42.png&quot; data-origin-width=&quot;1311&quot; data-origin-height=&quot;268&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cK7Ii6/btsJIRYerew/Ve9T0BWUZmFudBMus1mKDk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cK7Ii6/btsJIRYerew/Ve9T0BWUZmFudBMus1mKDk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cK7Ii6/btsJIRYerew/Ve9T0BWUZmFudBMus1mKDk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcK7Ii6%2FbtsJIRYerew%2FVe9T0BWUZmFudBMus1mKDk%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;1311&quot; height=&quot;268&quot; data-filename=&quot;스크린샷 2024-09-21 오후 11.46.42.png&quot; data-origin-width=&quot;1311&quot; data-origin-height=&quot;268&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>스터디</category>
      <author>엔지니어-여리</author>
      <guid isPermaLink="true">https://yeoli-tech.tistory.com/45</guid>
      <comments>https://yeoli-tech.tistory.com/45#entry45comment</comments>
      <pubDate>Sat, 21 Sep 2024 23:32:34 +0900</pubDate>
    </item>
  </channel>
</rss>