<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
  <channel>
    <title>Cloud</title>
    <link>https://vitta.tistory.com/</link>
    <description>시스템 엔지니어가 파이썬 코드와 클라우드를 씁니다.
github - https://github.com/madmax490500</description>
    <language>ko</language>
    <pubDate>Mon, 29 Jun 2026 05:13:21 +0900</pubDate>
    <generator>TISTORY</generator>
    <ttl>100</ttl>
    <managingEditor>Firewall</managingEditor>
    <image>
      <title>Cloud</title>
      <url>https://t1.daumcdn.net/cfile/tistory/2773D433597AF3651C</url>
      <link>https://vitta.tistory.com</link>
    </image>
    <item>
      <title>vsftp 익명 읽기/쓰기 설정</title>
      <link>https://vitta.tistory.com/95</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;vsftpd 에 익명으로 읽기/쓰기는 home directory 에서 안됩니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이점을 기억하시고 서브 디렉토리를 만들어서 설정하시면 됩니다. (예 uploads/ )&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1738809083993&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;# 익명 사용자를 허용합니다.
anonymous_enable=YES

# 익명 사용자의 루트 디렉토리를 설정합니다.
anon_root=/ftp_root

# 파일 쓰기를 허용합니다.
write_enable=YES

# 익명 사용자가 파일을 업로드할 수 있도록 허용합니다.
anon_upload_enable=YES

# 익명 사용자가 디렉토리를 생성할 수 있도록 허용합니다.
anon_mkdir_write_enable=YES

# 익명 사용자가 파일 삭제 및 이름 변경을 할 수 있도록 허용합니다.
anon_other_write_enable=YES

# 익명 사용자가 생성하는 파일 및 디렉토리의 기본 권한을 설정합니다.
anon_umask=0022

# 로컬 사용자를 chroot 환경에 가둡니다.
chroot_local_user=YES

# chroot 환경에서 쓰기 가능한 디렉토리를 허용합니다.
allow_writeable_chroot=YES

# 패시브 모드를 활성화합니다.
pasv_enable=YES

# 패시브 모드에서 사용할 최소 포트 번호를 설정합니다.
pasv_min_port=10000

# 패시브 모드에서 사용할 최대 포트 번호를 설정합니다.
pasv_max_port=10050

# standalone 모드에서 vsftpd를 실행합니다.
listen=YES

# vsftpd가 수신할 포트 번호를 설정합니다.
listen_port=2020&lt;/code&gt;&lt;/pre&gt;</description>
      <category>리눅스</category>
      <category>ANONYMOUS</category>
      <category>conf</category>
      <category>vsftp</category>
      <category>설정</category>
      <category>쓰기</category>
      <category>익명</category>
      <author>Firewall</author>
      <guid isPermaLink="true">https://vitta.tistory.com/95</guid>
      <comments>https://vitta.tistory.com/95#entry95comment</comments>
      <pubDate>Thu, 6 Feb 2025 20:33:59 +0900</pubDate>
    </item>
    <item>
      <title>X-Real-IP vs X-Forwared-IP 차이</title>
      <link>https://vitta.tistory.com/94</link>
      <description>&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;nginx.png&quot; data-origin-width=&quot;256&quot; data-origin-height=&quot;256&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/9rLRI/btsJQJ10kQg/XEe6VkCZ4Xzle2TeMqNTK0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/9rLRI/btsJQJ10kQg/XEe6VkCZ4Xzle2TeMqNTK0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/9rLRI/btsJQJ10kQg/XEe6VkCZ4Xzle2TeMqNTK0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F9rLRI%2FbtsJQJ10kQg%2FXEe6VkCZ4Xzle2TeMqNTK0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;256&quot; height=&quot;256&quot; data-filename=&quot;nginx.png&quot; data-origin-width=&quot;256&quot; data-origin-height=&quot;256&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;node 백엔드에서 원격지 웹서버의 client IP header 를 가져오는데 127.0.0.1 (undefinded) 라는 헤더값이 온다고 연락 받았습니다.&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;제가 proxy.conf 를 잘못 설정했나 var/log/nginx access로그를 보니&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1727685625346&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;1.1.1.1 - - [30/Sep/2024:17:04:51 +0900] &quot;POST /api/v1/aa HTTP/1.1&quot; 200 8770 &quot;-&quot; &quot;BestHTTP/2 v2.8.4&quot; &quot;-&quot;
2.2.2.2 - - [30/Sep/2024:17:05:04 +0900] &quot;POST /api/v1/bb HTTP/1.1&quot; 200 8770 &quot;-&quot; &quot;BestHTTP/2 v2.8.4&quot; &quot;-&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;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;X-Real-IP 는 nginx 에서 직전에 거치는 IP&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;X-Forwared-For 는 src-IP 입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;따라서 X-Forwared-For 를 일반적으로 쓰시는 게 정신건강에 좋을 것으로 생각됩니다.&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;node 백엔드에서 헤더값 파싱 부분을 수정하여 문제가 해결되었습니다.&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;
&lt;p data-ke-size=&quot;size16&quot;&gt;감사합니다.&lt;/p&gt;</description>
      <category>js</category>
      <category>nginx</category>
      <category>node</category>
      <category>x-forward-for</category>
      <category>x-real-ip</category>
      <author>Firewall</author>
      <guid isPermaLink="true">https://vitta.tistory.com/94</guid>
      <comments>https://vitta.tistory.com/94#entry94comment</comments>
      <pubDate>Mon, 30 Sep 2024 19:42:58 +0900</pubDate>
    </item>
    <item>
      <title>온프라미스에서 테라폼 사용하기</title>
      <link>https://vitta.tistory.com/93</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;br /&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 data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;단 tf 파일이 삭제될때는 어떻게 동작될지도 확인이 필요합니다.(그리고 언제적 PXE 기술을 꺼내는 것인지.)&lt;br /&gt;&lt;br /&gt;대략적인&amp;nbsp;구성을&amp;nbsp;생각해&amp;nbsp;본다면&amp;nbsp; &lt;br /&gt;&lt;br /&gt;1.&amp;nbsp;IPMI&amp;nbsp;는&amp;nbsp;IP&amp;nbsp;할당&amp;nbsp;완료&amp;nbsp;ID/PW&amp;nbsp;설정&amp;nbsp;완료 &lt;br /&gt;2.&amp;nbsp;PXE&amp;nbsp;서버&amp;nbsp;설정&amp;nbsp;(DHCP,TFTP,HTTP,FTP) &lt;br /&gt;3.&amp;nbsp;테라폼&amp;nbsp;세팅 &lt;br /&gt;4. Kickstart 파일 설정 (윈도우는 prep) ks.cfg &lt;br /&gt;&lt;br /&gt;하이퍼바이저를&amp;nbsp;통하지&amp;nbsp;않고&amp;nbsp;IPMI&amp;nbsp;만&amp;nbsp;연결되어&amp;nbsp;있으면&amp;nbsp;테라폼이&amp;nbsp;타겟&amp;nbsp;서버에&amp;nbsp;PXE&amp;nbsp;세팅을&amp;nbsp;해서&amp;nbsp;PXE&amp;nbsp;부팅을&amp;nbsp;시키는&amp;nbsp;것 &lt;br /&gt;그&amp;nbsp;이후에는&amp;nbsp;기본적인&amp;nbsp;PXE&amp;nbsp;부팅&amp;nbsp;방법을&amp;nbsp;따름. &lt;br /&gt;&lt;br /&gt;이것의&amp;nbsp;장점은&amp;nbsp;IPMI만&amp;nbsp;세팅이&amp;nbsp;되어&amp;nbsp;있으면&amp;nbsp;된다는&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;기존에 PXE 구축보다 타겟 서버의 PXE 설정이 자동화 되어 좀 더 간소화 되었습니다.&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;br /&gt;&lt;br /&gt;3번&amp;nbsp;테라폼&amp;nbsp;tf&amp;nbsp;세팅 &lt;/p&gt;
&lt;pre id=&quot;code_1727257368717&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;provider &quot;ipmi&quot; {
  host     = &quot;IPMI_HOST&quot;
  username = &quot;IPMI_USERNAME&quot;
  password = &quot;IPMI_PASSWORD&quot;
}

resource &quot;ipmi_power&quot; &quot;power_on&quot; {
  host     = &quot;IPMI_HOST&quot;
  username = &quot;IPMI_USERNAME&quot;
  password = &quot;IPMI_PASSWORD&quot;
  action   = &quot;on&quot;
}

resource &quot;ipmi_boot&quot; &quot;pxe_boot&quot; {
  host     = &quot;IPMI_HOST&quot;
  username = &quot;IPMI_USERNAME&quot;
  password = &quot;IPMI_PASSWORD&quot;
  bootdev  = &quot;pxe&quot;
}

resource &quot;null_resource&quot; &quot;install_os&quot; {
  provisioner &quot;remote-exec&quot; {
    inline = [
      &quot;curl -O http://example.com/rocky-linux.iso&quot;,
      &quot;curl -O http://example.com/ks.cfg&quot;,
      &quot;dd if=rocky-linux.iso of=/dev/sda&quot;,
      &quot;reboot&quot;
    ]
  }

  connection {
    type     = &quot;ssh&quot;
    host     = &quot;IPMI_HOST&quot;
    user     = &quot;root&quot;
    password = &quot;ROOT_PASSWORD&quot;
  }
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;br /&gt;&lt;br /&gt;4. 번 내용 kickstart 설정 (ks.cfg) &lt;br /&gt;&lt;br /&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1727257387763&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;#version=RHEL9
install
lang en_US.UTF-8
keyboard us
timezone America/New_York --isUtc
rootpw --plaintext yourpassword
user --name=youruser --password=yourpassword
reboot

# Use text mode install
text

# System bootloader configuration
bootloader --location=mbr

# Partition clearing information
clearpart --all --initlabel

# Disk partitioning information
part / --fstype=&quot;xfs&quot; --grow --size=1
part /boot --fstype=&quot;xfs&quot; --size=1024
part swap --fstype=&quot;swap&quot; --size=2048

%packages
@^minimal-environment
%end&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;</description>
      <category>인프라관리-코드</category>
      <category>onpromise</category>
      <category>pxe</category>
      <category>terraform</category>
      <category>온프라미스</category>
      <category>원격부팅</category>
      <category>테라폼</category>
      <author>Firewall</author>
      <guid isPermaLink="true">https://vitta.tistory.com/93</guid>
      <comments>https://vitta.tistory.com/93#entry93comment</comments>
      <pubDate>Wed, 25 Sep 2024 19:01:55 +0900</pubDate>
    </item>
    <item>
      <title>테라폼에서 RDS 메세지 구독 설정 시 주의 사항</title>
      <link>https://vitta.tistory.com/92</link>
      <description>&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;terraform-svgrepo-com.png&quot; data-origin-width=&quot;256&quot; data-origin-height=&quot;256&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bZZAbG/btsJFGK1GJM/eJWkCO9FQKEWmFHh8RYTwk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bZZAbG/btsJFGK1GJM/eJWkCO9FQKEWmFHh8RYTwk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bZZAbG/btsJFGK1GJM/eJWkCO9FQKEWmFHh8RYTwk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbZZAbG%2FbtsJFGK1GJM%2FeJWkCO9FQKEWmFHh8RYTwk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;256&quot; height=&quot;256&quot; data-filename=&quot;terraform-svgrepo-com.png&quot; data-origin-width=&quot;256&quot; data-origin-height=&quot;256&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;RDS 구독 메세지를 테라폼을 적용해서 사용 중인데 리소스를 찾지 못했던 경험을 공유 합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이번에는 source_ids 를 정할때 aws 의 ids 가 아닌 identifier 를 입력해야 합니다. 자꾸 ids 를 다시 확인하라고 해서, 문제 해결에 시간이 걸렸습니다.&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;pre id=&quot;code_1726810620308&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;terraform state show aws_db_instance.logdb01&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;정상적으로 rds 에 sns 구독을 연결 시키는 코드입니다.&lt;/p&gt;
&lt;pre id=&quot;code_1726803932856&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;resource &quot;aws_sns_topic&quot; &quot;rds_events_topic&quot; {
  name = &quot;rds-events-topic&quot;
}

resource &quot;aws_sns_topic_subscription&quot; &quot;email_subscription&quot; {
  topic_arn = aws_sns_topic.rds_events_topic.arn
  protocol  = &quot;email&quot;
  endpoint  = &quot;email@email.co.kr&quot; # Recieve E-mail 
  depends_on = [aws_sns_topic.rds_events_topic]  # SNS topic depend
}

resource &quot;aws_db_event_subscription&quot; &quot;rds_event_subscription&quot; {
  name            = &quot;rds-event-subscription&quot;
  sns_topic       = aws_sns_topic.rds_events_topic.arn
  source_type     = &quot;db-instance&quot;
  event_categories = [&quot;availability&quot;, &quot;configuration change&quot;, &quot;failover&quot;, &quot;failure&quot;, &quot;maintenance&quot;, &quot;notification&quot;, &quot;recovery&quot;, &quot;restoration&quot;]
  source_ids      = [aws_db_instance.logdb01.identifier,
                     aws_db_instance.gamedb01.identifier
                    ]

  depends_on = [
    aws_db_instance.logdb01, #instance depend. Can be deleted.
    aws_db_instance.gamedb01,
    aws_sns_topic_subscription.email_subscription
  ]

  tags = {
    Name = &quot;rds-event-subscription&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;</description>
      <category>클라우드</category>
      <category>Error</category>
      <category>RDS</category>
      <category>sns</category>
      <category>subscription</category>
      <category>terraform</category>
      <author>Firewall</author>
      <guid isPermaLink="true">https://vitta.tistory.com/92</guid>
      <comments>https://vitta.tistory.com/92#entry92comment</comments>
      <pubDate>Fri, 20 Sep 2024 19:07:07 +0900</pubDate>
    </item>
    <item>
      <title>Crash 난 POD 를 일괄 삭제</title>
      <link>https://vitta.tistory.com/91</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;쿠버네티스를 운영하다 보면 어떤 이유에서든지 크래시난 pod 가 여러개 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;가끔 일괄로 삭제하게 되는데 하나씩 하게 되면 너무 시간이 걸리기 때문에,&amp;nbsp;이럴때는 awk와 xarg 로 삭제하면 편합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1724144966371&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt; ## 특정 에러만 삭제
 
 kubectl get pods | grep 'Init:CrashLoopBackOff' | awk '{print $1}' | xargs kubectl delete pod
 
 ## 정상 메세지 이외 삭제
 
 kubectl get pods  --no-headers --field-selector=status.phase!=Running,status.phase!=Succeeded | awk '{ print $1};' | xargs kubectl delete pod&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;</description>
      <category>클라우드</category>
      <category>DELETE</category>
      <category>kubernetes</category>
      <category>POD</category>
      <author>Firewall</author>
      <guid isPermaLink="true">https://vitta.tistory.com/91</guid>
      <comments>https://vitta.tistory.com/91#entry91comment</comments>
      <pubDate>Tue, 20 Aug 2024 19:29:11 +0900</pubDate>
    </item>
    <item>
      <title>placement 그룹에 가입된 instance 들의 type 변경 실패시 대응 방법</title>
      <link>https://vitta.tistory.com/90</link>
      <description>&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;1688022884755.jfif&quot; data-origin-width=&quot;1257&quot; data-origin-height=&quot;683&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bYULZK/btsI2GdEYB0/0umv9t2kkximyFZdEfFfR0/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bYULZK/btsI2GdEYB0/0umv9t2kkximyFZdEfFfR0/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bYULZK/btsI2GdEYB0/0umv9t2kkximyFZdEfFfR0/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbYULZK%2FbtsI2GdEYB0%2F0umv9t2kkximyFZdEfFfR0%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;1257&quot; height=&quot;683&quot; data-filename=&quot;1688022884755.jfif&quot; data-origin-width=&quot;1257&quot; data-origin-height=&quot;683&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;AWS 인프라를 오래 사용하다 보니, 4세대 인스턴스들의 사양을 변경 할 경우가 발생하였습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;기존에 cluster 되어 있는 서비스들이었기 때문에 placement 그룹으로 묶어 놨던 서버들입니다.&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-CLI 에서 일괄 배치를 돌렸는데 자원부족으로 타입 변경 에러가 발생하는 것을 확인하였습니다.&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;처음에는 감을 못잡고 좀 헤메다가 placement 그룹이 해제된다는 것을 발견! ( 제 기억으로는 예전에 해제가 되지 않았습니다.) 바로 해제하고 변경을 완료하였습니다. (&lt;a title=&quot;AWS인스턴스유형변경문제해결&quot; href=&quot;https://docs.aws.amazon.com/ko_kr/AWSEC2/latest/UserGuide/troubleshoot-change-instance-type.html&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;아마존링크 참고&lt;/a&gt;)&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 100%;&quot;&gt;
&lt;ol style=&quot;list-style-type: decimal; background-color: #ffffff; color: #16191f; text-align: start;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;&lt;span&gt;클러스터 배치 그룹의 모든 인스턴스를 중지합니다.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;영향을 받는 인스턴스의 인스턴스 유형을 변경합니다.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;클러스터 배치 그룹의 모든 인스턴스를 시작합니다.&lt;/span&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;i&gt;이렇게 가이드 되어 있는데, 그냥 하나씩 해도 되긴합니다.&lt;/i&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;그러나 실제로 자원이 부족한 경우도 발생합니다. (3세대) 가급적이면 최신 세대의 인스턴스로 옮기는 것이 좋습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그리고 변경은 되는데 IPV4 주소가 릴리즈 될수도 있다고 하니, 이럴 경우에는 내부 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;해당 에러에 대한 메뉴얼은 위키에도 업데이트 하였는데.. 누군가는 보겠지요.&lt;/p&gt;</description>
      <category>AWS</category>
      <category>Instance Type</category>
      <category>Placement</category>
      <category>실패</category>
      <category>인스턴스타입</category>
      <author>Firewall</author>
      <guid isPermaLink="true">https://vitta.tistory.com/90</guid>
      <comments>https://vitta.tistory.com/90#entry90comment</comments>
      <pubDate>Tue, 13 Aug 2024 20:21:15 +0900</pubDate>
    </item>
    <item>
      <title>aws cli elb registration / deregistration</title>
      <link>https://vitta.tistory.com/89</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;프로젝트에 게임서버 롤링 업데이트가 필요하여 젠킨스 CI/CD를 이용하여 1대씩 패치를 진행하기로 하였습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이를 위해 aws elbv2 로드밸런서의 타겟 그룹에서 한대씩 deregistration 이 필요합니다.&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;기존에 있던 Deply code 에 target instance 들을 한대씩 번갈아 가며 세팅하게 하였으며, 그레이스풀하게 빠지는 시간에 맞춰 sleep 설정 하였습니다.&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 config 는 미리 설정되어 있어야합니다.)&lt;/p&gt;
&lt;pre id=&quot;code_1721722052482&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;##REGISTRATION
aws elbv2 register-targets --target-group-arn arn:aws:elasticloadbalancing:ap-northeast-1:072498040640:targetgroup/project/0e7e34feggererew2 --targets Id=i-0123456789a

##DEREGISTRATION
aws elbv2 register-targets --target-group-arn arn:aws:elasticloadbalancing:ap-northeast-1:072498040640:targetgroup/project/0e7e34feggererew2 --targets Id=i-0123456789a&lt;/code&gt;&lt;/pre&gt;</description>
      <category>클라우드</category>
      <category>AWS ELB</category>
      <category>deragistration</category>
      <category>elbv2</category>
      <category>registration</category>
      <author>Firewall</author>
      <guid isPermaLink="true">https://vitta.tistory.com/89</guid>
      <comments>https://vitta.tistory.com/89#entry89comment</comments>
      <pubDate>Tue, 23 Jul 2024 17:11:44 +0900</pubDate>
    </item>
    <item>
      <title>프로메테우스 모니터링 알림 라우트 설정</title>
      <link>https://vitta.tistory.com/88</link>
      <description>&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;alertmanager.png&quot; data-origin-width=&quot;200&quot; data-origin-height=&quot;200&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/b46kJ8/btsIDt6iLCA/UYNQ4txCvroYbDf1Fbfu10/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/b46kJ8/btsIDt6iLCA/UYNQ4txCvroYbDf1Fbfu10/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/b46kJ8/btsIDt6iLCA/UYNQ4txCvroYbDf1Fbfu10/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fb46kJ8%2FbtsIDt6iLCA%2FUYNQ4txCvroYbDf1Fbfu10%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;200&quot; height=&quot;200&quot; data-filename=&quot;alertmanager.png&quot; data-origin-width=&quot;200&quot; data-origin-height=&quot;200&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;alert.rule 업데이트 하고 amtool 로 문법체크 하여 줍니다.&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;더 해야될 것은 채널에 이름나올떄 alertmanager 가 아니라 각 채널의 이름이 나오는 것과, Annotations.description 을 못가지고 오는 것 같은데, 왜 그런지 확인 하는 부분이 남아있습니다. ( {{ $labels.name }} 으로 가져오면 됩니다.)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1721266955052&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;global:
  resolve_timeout: 5m
  slack_api_url: &quot;https://hooks.slack.com/services/ap1&quot;  # global Slack API URL

route:
  group_by: ['alertname']
  group_wait: 30s
  group_interval: 5m
  repeat_interval: 24h
  receiver: 'default-receiver'
  routes:
    - matchers:
        - job_name =~ &quot;ap1&quot;
      receiver: 'ap1'
    - matchers:
        - job_name =~ &quot;ap2&quot;
      receiver: 'ap2'
    - matchers:
        - job_name =~ &quot;ap3&quot;
      receiver: 'ap3'

receivers:
  - name: 'default-receiver'
    slack_configs:
      - api_url: &quot;https://hooks.slack.com/services/ap1&quot;
        username: 'ap1'
        send_resolved: true
        channel: '#ap1'
        title: &quot;{{ range .Alerts }}{{ .Annotations.summary }}\n{{ end }}&quot;
        text: &quot;{{ range .Alerts }}{{ .Annotations.description }}\n{{ end }}&quot;
        icon_emoji: ':bell:'
  - name: 'ap2'
    slack_configs:
      - api_url: &quot;https://hooks.slack.com/services/ap2&quot;
        username: 'ap2'
        send_resolved: true
        channel: '#ap2'
        title: &quot;{{ range .Alerts }}{{ .Annotations.summary }}\n{{ end }}&quot;
        text: &quot;{{ range .Alerts }}{{ .Annotations.description }}\n{{ end }}&quot;
        icon_emoji: ':dart:'
  - name: 'ap3'
    slack_configs:
      - api_url: &quot;https://hooks.slack.com/services/ap3&quot;
        username: 'ap3'
        send_resolved: true
        channel: '#ap3'
        title: &quot;{{ range .Alerts }}{{ .Annotations.summary }}\n{{ end }}&quot;
        text: &quot;{{ range .Alerts }}{{ .Annotations.description }}\n{{ end }}&quot;
        icon_emoji: ':dart:'
  - name: 'ap4'
    slack_configs:
      - api_url: &quot;https://hooks.slack.com/services/ap4&quot;
        channel: '#ap4'
        title: &quot;{{ range .Alerts }}{{ .Annotations.summary }}\n{{ end }}&quot;
        text: &quot;{{ range .Alerts }}{{ .Annotations.description }}\n{{ end }}&quot;
        icon_emoji: ':bell:'

templates:
  - /opt/prometheus/alertmanager/notifications.tmpl&lt;/code&gt;&lt;/pre&gt;</description>
      <author>Firewall</author>
      <guid isPermaLink="true">https://vitta.tistory.com/88</guid>
      <comments>https://vitta.tistory.com/88#entry88comment</comments>
      <pubDate>Thu, 18 Jul 2024 10:46:24 +0900</pubDate>
    </item>
    <item>
      <title>AWS EC2 rocky9 에서 securecrt, xshell 로그인이 실패하고 다른 rocky linux 에서는 접속 가능한 현상</title>
      <link>https://vitta.tistory.com/85</link>
      <description>&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;rocky.png&quot; data-origin-width=&quot;216&quot; data-origin-height=&quot;216&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bsIckk/btsGGdjK8hJ/eLy7KE6QMdxauqi8k10jHK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bsIckk/btsGGdjK8hJ/eLy7KE6QMdxauqi8k10jHK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bsIckk/btsGGdjK8hJ/eLy7KE6QMdxauqi8k10jHK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbsIckk%2FbtsGGdjK8hJ%2FeLy7KE6QMdxauqi8k10jHK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;216&quot; height=&quot;216&quot; data-filename=&quot;rocky.png&quot; data-origin-width=&quot;216&quot; data-origin-height=&quot;216&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;사설 가상 서버에서는 rocky 이미지로 설치 후에 별다른 이상없이 SSH 접속이 가능하였으나,&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 EC2 에서 rocky 9 이미지 설치 후에 기본 private key 로 접속이 되지 않는 현상이 발생하였다.&lt;/p&gt;
&lt;pre id=&quot;code_1715244421659&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;userauth_pubkey: key type ssh-rsa not in PubkeyAcceptedAlgorithms [preauth]&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;여러 SSH 클라이언트(securecrt, xshell, putty) 로 테스트해본 결과 로키 리눅스에서 ssh 접속만 가능하고 나머지는 auth methods 가 모두 실패하는 현상이 발생하였다.&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;구글링을 해보니 최신 리눅스는 regacy encryption 을 지원하지 않는 것 같았다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;해결 방법으로는 클라이언트 메소드를 바꾸거나 reqacy 를 지원하게 하는 방법으로 해결하면 될 것으로 보여 ssh 서버에 아래의 명령어를 실행하였다.&lt;/p&gt;
&lt;pre class=&quot;bash&quot; style=&quot;background-color: #f8f8f8; color: #151515; text-align: left;&quot; data-ke-language=&quot;bash&quot;&gt;&lt;code&gt;PubkeyAcceptedAlgorithms +ssh-rsa
HostKeyAlgorithms +ssh-rsa

## ---아래는 쓰지말것-- 전체 레거시 허용
update-crypto-policies --set LEGACY&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;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://access.redhat.com/documentation/ko-kr/red_hat_enterprise_linux/8/html/security_hardening/switching-the-system-wide-crypto-policy-to-mode-compatible-with-previous-systems_using-the-system-wide-cryptographic-policies&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://access.redhat.com/documentation/ko-kr/red_hat_enterprise_linux/8/html/security_hardening/switching-the-system-wide-crypto-policy-to-mode-compatible-with-previous-systems_using-the-system-wide-cryptographic-policies&lt;/a&gt;&lt;/p&gt;</description>
      <category>AWS</category>
      <category>EC2</category>
      <category>Error</category>
      <category>failure</category>
      <category>login</category>
      <category>regacy</category>
      <category>Rocky</category>
      <category>SSH</category>
      <category>ssh 접속 실패</category>
      <author>Firewall</author>
      <guid isPermaLink="true">https://vitta.tistory.com/85</guid>
      <comments>https://vitta.tistory.com/85#entry85comment</comments>
      <pubDate>Tue, 16 Apr 2024 17:13:00 +0900</pubDate>
    </item>
    <item>
      <title>여러개의 docker compose 파일 사용 시 주의사항</title>
      <link>https://vitta.tistory.com/84</link>
      <description>&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;aQvD3PdP_400x400.jpg&quot; data-origin-width=&quot;400&quot; data-origin-height=&quot;400&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cVw7FP/btsC6qzHCGb/zZvdHXlvgAxOMRYt8285M0/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cVw7FP/btsC6qzHCGb/zZvdHXlvgAxOMRYt8285M0/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cVw7FP/btsC6qzHCGb/zZvdHXlvgAxOMRYt8285M0/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcVw7FP%2FbtsC6qzHCGb%2FzZvdHXlvgAxOMRYt8285M0%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;400&quot; height=&quot;400&quot; data-filename=&quot;aQvD3PdP_400x400.jpg&quot; data-origin-width=&quot;400&quot; data-origin-height=&quot;400&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;젠킨스 파이프라인에서 여러개의 docker-compose 설정을 하던 중, 컴포즈 한개가 실행되고 다음 컴포즈 실행을 하면 먼저실행된 도커가 죽는 문제가 발생하였습니다. (run 되지 않음)&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;docker network inspect 로 자세히 살펴보니 docker network 가 두번 째 컴포즈가 실행될때 삭제되고 새로세팅되는 것을 확인 하였습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;디렉토리안에 하나의 컴포즈가 있을 때에는 network 가 재 설치되도 문제가 없지만, 이미 기동하고 있는 컨테이너가 있는 상황이라면 기동중인 컨테이너가 exit 되는 상황이 생깁니다.&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;&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>
      <category>compose</category>
      <category>delete network</category>
      <category>Docker</category>
      <category>multiple compose</category>
      <author>Firewall</author>
      <guid isPermaLink="true">https://vitta.tistory.com/84</guid>
      <comments>https://vitta.tistory.com/84#entry84comment</comments>
      <pubDate>Thu, 4 Jan 2024 18:53:24 +0900</pubDate>
    </item>
  </channel>
</rss>