4 min read

EKS ν†΅μ§Έλ‘œ μž¬κ΅¬μ„±ν•˜κΈ°

Table of Contents

와! νƒœμ΄ˆλ§ˆμ„μ΄μ•Ό!

인프라λ₯Ό ꡬ성할 λ•ŒλŠ” 항상 μ‹ μ€‘ν•˜κ²Œ κ³„νšν•˜κ³  ꡬ성해야 ν•©λ‹ˆλ‹€. λ„ˆλ¬΄λ‚˜λ„ λ‹Ήμ—°ν•˜κ³  저도 계속 λ…Έλ ₯ν•˜κ³  μžˆμ§€λ§Œ, 생각지도 λͺ»ν•œ κ³³μ—μ„œ λ¬Έμ œκ°€ 터지기도 ν•©λ‹ˆλ‹€.

μ§€λ‚œ 5μ›”, IP 블둝 좩돌 문제둜 인해 운영 ν™˜κ²½ 인프라λ₯Ό ν†΅μ§Έλ‘œ μž¬κ΅¬μ„±ν•΄μ•Ό ν–ˆλ˜ 일이 μžˆμ—ˆμŠ΅λ‹ˆλ‹€. λ‹€ν–‰νžˆλ„ K8s ν™˜κ²½μ„ 본격적으둜 μ΄κ΄€ν•˜κΈ° 전이라 영ν–₯도가 크지 μ•Šμ•˜μ§€λ§Œ, μƒλ‹Ήνžˆ 큰 μž‘μ—…μ΄μ—ˆμŠ΅λ‹ˆλ‹€.

μ΄λ²ˆμ—λŠ” 이 κ³Όμ •μ—μ„œ μ œκ°€ κ²ͺ은 μ‹œν–‰μ°©μ˜€μ™€ κ·Έ κ³Όμ •μ—μ„œ λŠλ‚€ 점을 μ μ–΄λ³΄κ³ μž ν•©λ‹ˆλ‹€.

🚨 문제 λ°œμƒ

μ–΄λŠ λ•Œμ™€ 같이 νšŒμ‚¬ 업무λ₯Ό 보고 μžˆλŠ”λ°, κ°‘μžκΈ° λ©˜μ…˜μ΄ ν•˜λ‚˜ μ™”μŠ΅λ‹ˆλ‹€. 운영 ν™˜κ²½μ—μ„œ μ‚¬μš©ν•˜λ˜ EKS ν΄λŸ¬μŠ€ν„°μ˜ IP 블둝이 λ‹€λ₯Έ 곳의 IP와 좩돌 μœ„ν—˜μ΄ μžˆλ‹€λŠ” κ²ƒμ΄μ—ˆμŠ΅λ‹ˆλ‹€.

처음 ν™˜κ²½μ„ ꡬ성할 λ•Œ κΈ°μ‘΄ IP 블둝을 νŒŒμ•…ν•˜κΈ° νž˜λ“€μ–΄ 톡상적인 λ²”μœ„ λ°–μ—μ„œ Private IP 블둝을 μ„€μ •ν–ˆκ³ , 이λ₯Ό νŒ€ μ°¨μ›μ—μ„œ λ°œκ²¬ν•˜μ§€ λͺ»ν–ˆλ˜ 것이 μ›μΈμ΄μ—ˆμŠ΅λ‹ˆλ‹€. λ‹€ν–‰νžˆ λ§Œλ“€μ–΄μ§€μ§€ μ–Όλ§ˆ λ˜μ§€ μ•Šμ€ ν™˜κ²½μ΄μ—ˆκΈ° λ•Œλ¬Έμ—, 영ν–₯도가 적을 λ•Œ λΉ λ₯΄κ²Œ νŒλ‹¨ν•΄ μž¬κ΅¬μ„± μž‘μ—…μ— λ“€μ–΄κ°€κΈ°λ‘œ ν–ˆμŠ΅λ‹ˆλ‹€.

섀정이 잘λͺ»λ˜μ–΄ μ΄ˆκΈ°μ— 앱을 μƒˆλ‘œ λ§Œλ“€κ±°λ‚˜ μž‘μ€ 인프라λ₯Ό μž¬κ΅¬μ„±ν•΄ λ³Έ 적은 μžˆμ§€λ§Œ, μ΄λ ‡κ²Œ κ½€λ‚˜ 큰 규λͺ¨μ˜ 인프라 μž¬κ΅¬μ„±μ€ μ²˜μŒμ΄μ—ˆμŠ΅λ‹ˆλ‹€. λ‹€ν–‰νžˆλ„ μƒˆλ‘œμš΄ μΈν”„λΌλŠ” λŒ€λΆ€λΆ„ Terraform으둜 κ΅¬μ„±λ˜μ–΄ μžˆμ—ˆκ³ , κ²‰λ³΄κΈ°μ—λŠ” 큰 λ¬Έμ œκ°€ 없을 것 κ°™μ•˜μŠ΅λ‹ˆλ‹€.

개발 ν™˜κ²½ EKS μž¬κ΅¬μ„±

λ¬΄μž‘μ • 개발 ν™˜κ²½μ—μ„œ μž¬κ΅¬μ„±μ„ μ‹œμž‘ν–ˆμŠ΅λ‹ˆλ‹€. μ—­μ‹œ λ§Œλ“€μ–΄μ§€μ§€ μ–Όλ§ˆ λ˜μ§€ μ•Šμ•˜κ³ , 거의 μ‚¬μš©λ˜μ§€ μ•Šκ³  μžˆμ—ˆκΈ° λ•Œλ¬Έμ— μœ„ν—˜λ„λŠ” 거의 μ—†μ—ˆμŠ΅λ‹ˆλ‹€.

κ²°κ΅­ 잘λͺ»λœ 것은 EKS에 μ—°κ²°λœ VPC Private IPμ˜€κΈ° λ•Œλ¬Έμ—, μ²˜μŒμ—λŠ” λ‹¨μˆœνžˆ β€œVPC의 IP λΈ”λ‘λ§Œ λ³€κ²½ν•˜λ©΄ λ˜κ² μ§€?”라고 μƒκ°ν–ˆμŠ΅λ‹ˆλ‹€. κ·Έλ ‡κ²Œ λ˜μ—ˆμœΌλ©΄ 정말 μ’‹μ•˜μ„ 텐데, ν˜„μ‹€μ€ κ·Έλ ‡κ²Œ λ§Œλ§Œν•˜μ§€ μ•Šμ•˜μŠ΅λ‹ˆλ‹€. EKS ν΄λŸ¬μŠ€ν„°λ₯Ό μœ μ§€ν•˜λ©΄μ„œ VPC만 λ³€κ²½ν•˜λŠ” 것은 λΆˆκ°€λŠ₯ν–ˆμŠ΅λ‹ˆλ‹€.

이 λ³€κ²½ κ³Όμ •μ—μ„œ 정상적인 λ¦¬μ†ŒμŠ€λ„ 정합성이 κΉ¨μ Έ 버렸고, terraform apply, terraform destroyμ‘°μ°¨ μ œλŒ€λ‘œ μž‘λ™ν•˜μ§€ μ•Šμ•˜μŠ΅λ‹ˆλ‹€. κ²°κ΅­ μ˜μ‘΄μ„±μ„ μˆ˜λ™μœΌλ‘œ λͺ‡λͺ‡ 개λ₯Ό μ§€μ›Œ κ°€λ©΄μ„œ μ²˜λ¦¬ν•΄μ•Ό ν–ˆκ³ , μš°μ—¬κ³‘μ ˆ 끝에 λ¦¬μ†ŒμŠ€λ₯Ό λͺ¨λ‘ μ§€μš°κ³  μƒˆλ‘œ ꡬ성을 μ™„λ£Œν–ˆμŠ΅λ‹ˆλ‹€.
(λ‹€ν–‰νžˆλ„ λ¦¬μ†ŒμŠ€λ₯Ό λͺ¨λ‘ μ§€μš°κ³  맨 λ•…μ—μ„œ μƒˆλ‘œ κ΅¬μ„±ν•˜λŠ” μž‘μ—…μ€ μ–΄λ ΅μ§€ μ•Šμ•˜μŠ΅λ‹ˆλ‹€.)

운영 ν™˜κ²½ EKS μž¬κ΅¬μ„±

이후 운영 ν™˜κ²½μ—μ„œλŠ” λ™μΌν•œ μ‹€μˆ˜λ₯Ό λ°˜λ³΅ν•˜μ§€ μ•ŠκΈ° μœ„ν•΄ μΆ©λΆ„νžˆ μ‹œκ°„μ„ 두고 κ³„νšμ„ μ„Έμ› μŠ΅λ‹ˆλ‹€.
결둠적으둜 λ‚΄λ¦° λ°©ν–₯은 ν•œ λ§ˆλ””λ‘œ Create and Deleteμ˜€μŠ΅λ‹ˆλ‹€. 즉 EKSλ₯Ό 1벌 더 λ§Œλ“€κ³ , μ„œλΉ„μŠ€λ₯Ό λͺ¨λ‘ μ΄κ΄€ν•œ 뒀에 κΈ°μ‘΄ ν΄λŸ¬μŠ€ν„°λ₯Ό μ‚­μ œν•˜λŠ” κ³„νšμ΄μ—ˆμ£ .

κ·Έλž˜μ„œ μ•„μ˜ˆ μƒˆλ‘œμš΄ 폴더λ₯Ό λ§Œλ“€μ–΄ μƒˆλ‘œμš΄ EKS ν΄λŸ¬μŠ€ν„°λ₯Ό κ΅¬μ„±ν•˜κ³ , 쀑볡될 수 μ—†λŠ” IAM Roleμ΄λ‚˜ λ‹€λ₯Έ λ¦¬μ†ŒμŠ€μ²˜λŸΌ 이관이 ν•„μš”ν•  경우 terraform state rm λͺ…λ Ήμ–΄λ‘œ κΈ°μ‘΄ Terraform stateμ—μ„œ μ‚­μ œν•˜κ³ , μƒˆλ‘œμš΄ Terraform state에 λ‹€μ‹œ import ν•˜λŠ” λ°©μ‹μœΌλ‘œ μ§„ν–‰ν–ˆμŠ΅λ‹ˆλ‹€. 그리고 μ„œλΉ„μŠ€κΉŒμ§€ λͺ¨λ‘ 배포되면 Route 53 λ ˆμ½”λ“œλ§Œ λ³€κ²½ν•΄ μ£Όκ³ , νŠΈλž˜ν”½ μ „ν™˜μ„ ν™•μΈν•œ ν›„ κΈ°μ‘΄ λ¦¬μ†ŒμŠ€λ₯Ό μ •λ¦¬ν–ˆμŠ΅λ‹ˆλ‹€.

ν•˜μ§€λ§Œ 이 κ³Όμ •μ—μ„œλ„ λͺ‡ κ°€μ§€ μ‹œν–‰μ°©μ˜€κ°€ μžˆμ—ˆμŠ΅λ‹ˆλ‹€.

  1. Peering μ—°κ²° 생성은 μžλ™ν™”ν•  수 μ—†μ—ˆμŠ΅λ‹ˆλ‹€.
    • μ •ν™•νžˆλŠ”, 같은 계정 + 같은 지역일 경우 μžλ™ μˆ˜λ½μ„ 톡해 μžλ™ν™”κ°€ κ°€λŠ₯ν•˜μ§€λ§Œ, μ•„λ‹ˆλΌλ©΄ μˆ˜λ™μœΌλ‘œ μˆ˜λ½ν•΄ Peering 연결을 생성해야 ν•©λ‹ˆλ‹€.
    • λ”°λΌμ„œ Terraformμ—μ„œ λ¦¬μ†ŒμŠ€λ₯Ό μƒμ„±ν•˜λ”λΌλ„, μˆ˜λ™μœΌλ‘œ 수락 ν›„ import 과정이 ν•„μš”ν–ˆμŠ΅λ‹ˆλ‹€.
  2. Terraform state 이동 ν›„ S3 IAM Role의 ν‚€ 정보λ₯Ό μ°Έμ‘°ν•˜μ§€ λͺ»ν•˜λŠ” λ¬Έμ œκ°€ μžˆμ—ˆμŠ΅λ‹ˆλ‹€.
    • 기쑴에 μƒμ„±λœ key κ°’μœΌλ‘œ K8s Secret을 μƒμ„±ν•˜κ³  μžˆμ—ˆκ³ , 이 값을 import ν›„μ—λŠ” μ°Έμ‘°ν•  수 μ—†μ—ˆμŠ΅λ‹ˆλ‹€.
    • IAM Userλ₯Ό μž¬μƒμ„±ν•˜λ©΄ 해결이 κ°€λŠ₯ν•©λ‹ˆλ‹€. λ‹€λ§Œ, κΆκ·Ήμ μœΌλ‘œλŠ” AWS Secrets Manager 등을 μ‚¬μš©ν•΄ κ΄€λ¦¬ν•˜λŠ” 것이 μ’‹μŠ΅λ‹ˆλ‹€.
  3. μ‚­μ œ κ³Όμ •μ—μ„œλ„ Security Group이 μ§€μ›Œμ§€μ§€ μ•Šμ•„ VPC μ‚­μ œκ°€ μ•ˆ λ˜λŠ” λ“± κΉ”λ”ν•˜κ²Œ μ‚­μ œλ˜μ§€ μ•ŠλŠ” λ¦¬μ†ŒμŠ€κ°€ λͺ‡ 개 μžˆμ—ˆμŠ΅λ‹ˆλ‹€.
    • 이 κ²½μš°λŠ” μˆ˜λ™μœΌλ‘œ μ²˜λ¦¬ν•˜μ˜€μŠ΅λ‹ˆλ‹€.

κ·Έλž˜λ„ μ΅œλŒ€ν•œ κ³„νšμ„ μ„Έμš°κ³  μ•ˆμ •μ μΈ λ°©ν–₯으둜 μ§„ν–‰ν–ˆκΈ° λ•Œλ¬Έμ— μ„œλΉ„μŠ€μ— 거의 영ν–₯을 μ£Όμ§€ μ•Šκ³  ꡐ체λ₯Ό μ™„λ£Œν•  수 μžˆμ—ˆμŠ΅λ‹ˆλ‹€.

배운 점

이런 큰 μž‘μ—…μ„ ν•˜λ©΄μ„œ λͺ‡ κ°€μ§€ μ€‘μš”ν•œ 점을 λ°°μ› μŠ΅λ‹ˆλ‹€:

  1. 처음 μ‹œν–‰μ°©μ˜€λ₯Ό κ²ͺ은 게 개발 ν™˜κ²½μ΄λΌλŠ” 점이 정말 λ‹€ν–‰μ΄μ—ˆμŠ΅λ‹ˆλ‹€.
    μ—­μ‹œ 무엇이든 운영 ν™˜κ²½μ— μ μš©ν•˜κΈ° μ „μ—λŠ” μ‹œν–‰μ°©μ˜€κ°€ ν•„μš”ν•˜λ‹€λŠ” 것을 λ‹€μ‹œ ν•œλ²ˆ λŠκΌˆμŠ΅λ‹ˆλ‹€.
  2. 개발 ν™˜κ²½μ—μ„œ μ‹œν–‰μ°©μ˜€λ₯Ό κ²ͺκ³  λ‚˜μ„œ λ°”λ‘œ μƒκ°ν–ˆλ˜ 것은, 운영 ν™˜κ²½μ—μ„œ λ™μΌν•œ 과정을 κ±°μΉ  μˆ˜λŠ” μ—†λ‹€λŠ” κ²ƒμ΄μ—ˆμŠ΅λ‹ˆλ‹€.
    μ μ§€λ§Œ μ‹€μ œ μ„œλΉ„μŠ€κ°€ λŒμ•„κ°€κ³  있기 λ•Œλ¬Έμ— μ•ˆμ •μ μΈ κ³„νšμ΄ ν•„μš”ν–ˆκ³ , μ‹€μ œλ‘œ 이λ₯Ό μ„Έμ›Œ μ§„ν–‰ν–ˆμŠ΅λ‹ˆλ‹€. μ—„μ²­λ‚˜κ²Œ μ§œμž„μƒˆ μžˆλŠ” κ³„νšμ΄ ν•„μš”ν•œ 것은 μ•„λ‹ˆμ—ˆμ§€λ§Œ, κ·Έμ € κ³„νšμ„ μ„Έμš°κ³  쑰심성을 μ±™κΈ°λŠ” κ²ƒλ§ŒμœΌλ‘œλ„ 큰 도움이 λ˜μ—ˆλ˜ 것 κ°™λ„€μš”.
  3. κ²‰μœΌλ‘œλŠ” μž‘μ€ 문제처럼 보여도 큰 μž„νŒ©νŠΈλ₯Ό 쀄 수 μžˆλ‹€λŠ” 것을 λ°°μ› μŠ΅λ‹ˆλ‹€. 이번 κ²½μš°μ—λ„ λ°”κΎΈμ–΄μ•Ό ν•˜λŠ” 것은 Private IP 블둝 ν•˜λ‚˜μ˜€μ§€λ§Œ, EKS ν΄λŸ¬μŠ€ν„°λ₯Ό μž¬κ΅¬μ„±ν•˜λŠ” 것 μ™Έμ—λŠ” 방법이 μ—†μ—ˆμŠ΅λ‹ˆλ‹€. 특히 λ„€νŠΈμ›Œν¬ 섀정은 맀우 λ―Όκ°ν•˜κ³  클라우슀 λ¦¬μ†ŒμŠ€μ™€ 깊게 μ—°κ΄€λ˜μ–΄ μžˆμ–΄ λ”λ”μš± 쑰심해야 함을 λ°°μ› μŠ΅λ‹ˆλ‹€.

마치며

상황 μ’…λ£Œ

λŒ€λ‹¨ν•œ 업적도 μ•„λ‹ˆκ³ , λ‚΄μš©λ„ λ§Žμ§€ μ•Šκ³ , 심지어 μ‹€μˆ˜λ₯Ό λ³΅κ΅¬ν•œ λ‚΄μš©μ΄λΌμ„œ 이λ₯Ό λΈ”λ‘œκ·Έμ— μ˜¬λ¦¬λŠ” 게 λ§žλ‚˜ 싢기도 ν–ˆμŠ΅λ‹ˆλ‹€. ν•˜μ§€λ§Œ μ΄λŸ¬ν•œ λ‚΄μš©λ„ λˆ„κ΅°κ°€μ—κ²Œ 도움이 될 μˆ˜λ„ 있고, 특히 μ € μžμ‹ μ—κ²Œ 경각심을 쀄 수 있기 λ•Œλ¬Έμ— κΈ°λ‘ν•˜κ²Œ λ˜μ—ˆμŠ΅λ‹ˆλ‹€.

λ‹€ν–‰νžˆλ„ 이후에 EKS ν™˜κ²½ ꡬ성은 순쑰둭게 μ§„ν–‰λ˜κ³  있고, ν•˜λ‚˜ν•˜λ‚˜μ”© 이관 μž‘μ—…μ„ μ§„ν–‰ μ€‘μž…λ‹ˆλ‹€. μ§€κΈˆλ„ 맀일맀일 μƒˆλ‘œμš΄ 문제λ₯Ό 마주치고, μ•„μ§κΉŒμ§€λŠ” μ΄λŸ¬ν•œ κ³Όμ •μ—μ„œ μ—”μ§€λ‹ˆμ–΄μ˜ λ””ν…ŒμΌμ΄ μ€‘μš”ν•˜λ‹€κ³  λŠλ‚λ‹ˆλ‹€. μ§€κΈˆμ²˜λŸΌ 문제λ₯Ό ν•˜λ‚˜ν•˜λ‚˜μ”© ν•΄κ²°ν•΄ λ‚˜κ°€λ©° μ €λ§Œμ˜ κ°€μΉ˜λ₯Ό μ°Ύμ•„κ°€λ € ν•©λ‹ˆλ‹€.