kkumtree

Release file for URL is not valid yet ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•

  • kkumtree

2023-06-29T02:28:34+09:00

์ตœ๊ทผ WSL๋ฅผ ์“ฐ๊ฒŒ ๋˜๋ฉด์„œ, ํ•œ ๊ฐ€์ง€ ์ด์Šˆ๊ฐ€ ์ƒ๊ฒผ๋‹ค.
APT repo๋ฅผ ์—…๋ฐ์ดํŠธ ํ•˜๋ฉด ์•„๋ž˜์™€ ๊ฐ™์€ ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค.
์ด๊ฒƒ์ €๊ฒƒ ์†๋Œ€๋ณด๊ณ  ํ•ด๊ฒฐ๋ฒ•์„ ์ ์–ด๋ณด๊ณ ์ž ํ•œ๋‹ค.

apt-update-with-error

E: Release file for http://ports.ubuntu.com/ubuntu-ports/dists/jammy/InRelease is not valid yet (invalid for another 5min 1s). Updates for this repository will not be applied.

์˜ค๋ฅ˜ ์ฆ์ƒ์€ ๋ฆด๋ฆฌ์Šค ํŒŒ์ผ์ด ์กด์žฌํ•˜์ง€ ์•Š๋Š”๋ฐ, 5๋ถ„ 1์ดˆ๋™์•ˆ ์œ ํšจํ•˜์ง€ ์•Š๋Š”๋‹ค๊ณ  ํ•œ๋‹ค.
๋ฌด์Šจ ๋ง์ธ๊ฐ€ ์‹ถ์€๋ฐ, 5๋ถ„ ์žˆ๋‹ค๊ฐ€ ์—…๋ฐ์ดํŠธ ํ•ด๋ณด๋ผ๋Š” ๊ฒƒ์ด๋‹ค.

์›์ธ

์˜ค๋žซ๋™์•ˆ ์ ˆ์ „๋ชจ๋“œ๋กœ ๋‘์–ด์„œ ์‹œ๊ฐ„ ๋™๊ธฐํ™”๊ฐ€ ์•ˆ๋œ ๊ฒƒ์œผ๋กœ ๋ณด์ธ๋‹ค.
์žฌ๋ถ€ํŒ…ํ•˜์ง€ ์•Š์œผ๋ ค๊ณ  ํ–ˆ๊ธฐ์—, ํ•ด๊ฒฐ์„ ์œ„ํ•ด ๋” ๋งŽ์€ ์‹œ๊ฐ„์„ ๋ณด๋ƒˆ๋‹ค.

Linux Runlevel - ๋Ÿฐ๋ ˆ๋ฒจ/๋ถ€ํŠธ๋ ˆ๋ฒจ

  • kkumtree

2023-06-22T16:07:05+09:00

CPU๋ฅผ 1600X์—์„œ 5700X๋กœ ์—…๊ทธ๋ ˆ์ด๋“œ๋ฅผ ์ง„ํ–‰ํ•˜๊ธฐ์— ์•ž์„œ,
RunLevel(๋Ÿฐ๋ ˆ๋ฒจ/๋ถ€ํŠธ๋ ˆ๋ฒจ)์— ๋Œ€ํ•ด ํ•œ๋ฒˆ ๋ฉ”๋ชจํ•˜๊ณ ์ž ํ•จ.

Runlevel

  • 7๊ฐ€์ง€ ๋ ˆ๋ฒจ์ด ์กด์žฌ

    • man runlevel ์ฐธ๊ณ 
  • Level 5์„ ์ œ์™ธํ•˜๊ณ ๋Š”, cli ํ™˜๊ฒฝ์—์„œ๋งŒ ๊ตฌ๋™

  • Linux Standard Base ๊ธฐ์ค€

    • ls -l /lib/systemd/system/runlevel?.target ๋ช…๋ น์–ด๋กœ ํ™•์ธ ๊ฐ€๋Šฅ
RunLevel EN ์„ค๋ช… ๋น„๊ณ 
0 Power Off ์‹œ์Šคํ…œ ์ข…๋ฃŒ(์ค‘๋‹จ/Halt)
1 Rescue ์‹œ์Šคํ…œ ๋ณต๊ตฌ ๋‹จ์ผ ์‚ฌ์šฉ์ž ๋ชจ๋“œ
2 Multi-User ๋‹ค์ค‘ ์‚ฌ์šฉ์ž(ํ…์ŠคํŠธ ๋ชจ๋“œ, ๋„คํŠธ์›Œํฌ ์„œ๋น„์Šค X) ์‚ฌ์šฉ X (์‚ฌ์šฉ์ž ์ •์˜ ๊ฐ€๋Šฅ)
3 Multi-User ๋‹ค์ค‘ ์‚ฌ์šฉ์ž(ํ…์ŠคํŠธ ๋ชจ๋“œ)
4 Multi-User ์ƒ๋™ ์‚ฌ์šฉ X (์‚ฌ์šฉ์ž ์ •์˜ ๊ฐ€๋Šฅ)
5 Graphical ๋‹ค์ค‘ ์‚ฌ์šฉ์ž ๋ชจ๋“œ (๊ทธ๋ž˜ํ”ฝ ๋ชจ๋“œ) X-window ๊ธฐ๋ฐ˜
6 Reboot ์‹œ์Šคํ…œ ๋ฆฌ๋ถ€ํŒ…

์šด์˜์ฒด์ œ(Ubuntu 22.04 ๊ธฐ์ค€)๋‚ด ํ™•์ธ

  • su ๋ชจ๋“œ์—์„œ. target์„ ๊ธฐ๋ฐ˜์œผ๋กœ ๋งํ‚น๋˜์–ด ์žˆ์Œ์„ ํ™•์ธ
  • ls -al /lib/systemd/system/runlevel?.target: default
  • ls -al /etc/systemd/system | grep runlevel?.target.wants: ์‚ฌ์šฉ์ž ์ •์˜์šฉ ํด๋”
sudo su
ls -l /lib/systemd/system/runlevel?.target*

runlevel

Vagrant ์„ค์น˜ ๋ฐ Provider ์ง€์ •

  • kkumtree

2023-06-19T11:12:47+09:00

Ubuntu 23.04 (Host OS)์—์„œ ๊ฐ„๋‹จํ•˜๊ฒŒ Vagrant ์‚ฌ์šฉ์„ ํ•ด๋ณด๊ณ , VBox๊ฐ€ ์•„๋‹Œ Docker๋ฅผ Provider๋กœ ์ง€์ •ํ•˜์—ฌ ์‚ฌ์šฉํ•ด๋ณธ๋‹ค.

  • WSL2 ํ™˜๊ฒฝ์—์„œ๋Š” Vagrant๊ฐ€ ์˜๋„ํ•œ๋Œ€๋กœ ์ž‘๋™ํ•˜์ง€ ์•Š์œผ๋ฏ€๋กœ ์œ ์˜: ๋ณ„๋„์˜ ์„ค์ • ํ•„์š”

Vagrant ์„ค์น˜

  • Ubuntu 22.04 LTS ๋ฐ 23.10 ๊ธฐ์ค€, APT repo๋ฅผ ํ†ตํ•œ ์„ค์น˜ ์ง€์›
sudo apt-get install vagrant

VBox ์„ค์น˜(์‚ฌ์šฉ ์‹œ)

  • CPU ๊ฐ€์ƒํ™” ๊ธฐ์ˆ  ํ™œ์„ฑํ™” ํ•„์š”(BIOS๋‹จ, AMD์˜ ๊ฒฝ์šฐ๋Š” SVM, Intel์˜ ๊ฒฝ์šฐ๋Š” VT-x)

enable_svm_for_vbox

enable_svm_in_amd_bios

  • virtualbox-ext-pack(์„ ํƒ): USB 2.0/3.0 ์ง€์› ๋“ฑ์˜ ํ™•์žฅ ๊ธฐ๋Šฅ์„ ์‚ฌ์šฉํ•˜๋ ค๋ฉด ์„ค์น˜
    • ๊ฐœ์ธ์šฉ๋„์˜ ์ œํ•œ์  ๋ผ์ด์„ ์Šค(๋™์˜๋ฅผ ์œ„ํ•œ ๋Œ€ํ™”์ฐฝ ํ™•์ธ)
    • ํ™•์žฅ๊ธฐ๋Šฅ์„ ์“ธ ํ•„์š”๊ฐ€ ์—†๊ธฐ ๋•Œ๋ฌธ์— ์„ค์น˜ํ•˜์ง€ ์•„๋‹ˆํ•จ
sudo apt-get install virtualbox
# sudo apt-get install virtualbox-ext-pack

Docker ์„ค์น˜(์‚ฌ์šฉ ์‹œ)

  • Ubuntu ๊ธฐ์ค€, ์•„๋ž˜ 3๊ฐ€์ง€ ์„ค์น˜ ๋ฐฉ๋ฒ•์ด ์žˆ์œผ๋ฏ€๋กœ, ์นœ์ˆ™ํ•œ ๋ชจ๋“œ๋กœ ์ง„ํ–‰
sudo snap install docker # ์ตœ์‹ ๋ฒ„์ „
sudo apt-get install docker.io
sudo apt-get install podman-docker
  • Docker ๊ถŒํ•œ ๋ถ€์—ฌ: ๋ผ์ด๋ธŒ ์„œ๋น„์Šค ์‹œ ๊ถŒํ•œ ์œ ์˜ (Docker Docs)
    • Docker ๊ทธ๋ฃน์— ํ˜„์žฌ ์‚ฌ์šฉ์ž ์ถ”๊ฐ€
    • Docker ๊ทธ๋ฃน์— ์†ํ•œ ์‚ฌ์šฉ์ž๋Š” sudo ์—†์ด๋„ Docker ์‚ฌ์šฉ ๊ฐ€๋Šฅ
sudo addgroup --system docker
sudo adduser $USER docker
newgrp docker
  • (์ฐธ๊ณ ) Docker ๊ณต์‹ Docs์— ์„œ์ˆ ๋œ Docker Engine ์„ค์น˜ ๋ฐฉ๋ฒ•

Vagrantfile ์ƒ์„ฑ

VBox ์‚ฌ์šฉ ์‹œ

  • Snippet: Gist
    • CPU: 1Core / RAM: 1024MB
# -*- mode: ruby -*-
# vi: set ft=ruby :

Vagrant.configure("2") do |config|
  config.vm.box = "ubuntu/focal64"

  config.vm.define "ubuntu" do |ubuntu|
    ubuntu.vm.hostname = "kkumtree-server"
    ubuntu.vm.provider "virtualbox" do |vb|
      vb.name = "ubuntu-server"
      vb.cpus = 1
      vb.memory = 1024
    end
    
    ubuntu.vm.network "private_network", ip: "192.168.56.99"

    ubuntu.vm.provision "shell", inline: <<-SCRIPT
      sudo sed -i 's/PasswordAuthentication no/PasswordAuthentication yes/g' /etc/ssh/sshd_config
      sudo useradd kkumtree -m -s /bin/bash
      sudo usermod -a -G sudo kkumtree
      echo kkumtree:kkumtree | sudo chpasswd
      sudo systemctl restart sshd
    SCRIPT
  end
end

Docker ์‚ฌ์šฉ ์‹œ

  • Vagrantfile๊ณผ Dockerfile์€ ๊ฐ™์€ ํด๋”์— ์žˆ์Œ์„ ์ „์ œ, ์•„๋‹ ๊ฒฝ์šฐ d.build_dir ํŒŒ๋ผ๋ฏธํ„ฐ ์ˆ˜์ •.
    • ์•„๋ž˜์ฒ˜๋Ÿผ ๋‹ค๋ฅธ ํด๋”๋ฅผ ์ง€์ •ํ•˜์—ฌ ์‚ฌ์šฉ ๊ฐ€๋Šฅ

vagrant_dockerfile_path

AWS EKS ์Šคํ„ฐ๋”” 7์ฃผ์ฐจ - Automation

  • kkumtree

2023-06-10T15:13:19+09:00

EKS ์Šคํ„ฐ๋””๋„ ๋งˆ์ง€๋ง‰ 7์ฃผ์ฐจ๋ฅผ ๋งž์ดํ–ˆ์Šต๋‹ˆ๋‹ค.

์ด๋ฒˆ์—๋Š” AWS Controller for k8s(ACK)์™€ flux๋ฅผ ๊ฐ€๋ณ๊ฒŒ ์‹ค์Šตํ•ด๋ณด๊ณ 
์ž๋™ํ™”์— ๋Œ€ํ•ด ๋ง›๋ณด๊ธฐ๋ฅผ ํ•ด๋ณด์•˜์Šต๋‹ˆ๋‹ค.

์•ž์„œ ํ•™์Šตํ•ด๋ณธ IRSA ๊ฐœ๋… ์™ธ์—๋„ CRD(CustomResourceDefinition)์„ ํ™œ์šฉํ•ฉ๋‹ˆ๋‹ค.

1. ์‹ค์Šตํ™˜๊ฒฝ ๋ฐฐํฌ

์‹ค์Šต์„ ์œ„ํ•œ YAMLํŒŒ์ผ์ด ๋ณ€๊ฒฝ๋œ๊ฑฐ ๋ง๊ณ ๋Š” 6์ฃผ์ฐจ์™€ ์œ ์‚ฌํ•ฉ๋‹ˆ๋‹ค.

curl -O https://s3.ap-northeast-2.amazonaws.com/cloudformation.cloudneta.net/K8S/eks-oneclick6.yaml

# ์ดํ•˜ ์ค‘๋žต

# CERT_ARN(ACM)์˜ ๊ฒฝ์šฐ์—๋Š” /etc/profile์— ํ™˜๊ฒฝ๋ณ€์ˆ˜ ์ €์žฅ์„ ์•ˆํ•ด๋‘ฌ์„œ  
# ์„ธ์…˜์ด ๋งŒ๋ฃŒ๋˜๋ฉด, ๋‹ค์‹œ ์žฌ์„ค์ • ํ•„์š”

CERT_ARN=`aws acm list-certificates --query 'CertificateSummaryList[].CertificateArn[]' --output text`
echo $CERT_ARN

2. ACK(AWS Controller for k8s)

  • ์›น์ฝ˜์†”์— ์ ‘๊ทผํ•˜์ง€ ์•Š๊ณ ๋„, AWS ์„œ๋น„์Šค ๋ฆฌ์†Œ์Šค๋ฅผ ์ง์ ‘ k8s์—์„œ ์ •์˜ ๋ฐ ์‚ฌ์šฉ๊ฐ€๋Šฅ
  • ์ˆœ์„œ: ACK ์ปจํŠธ๋กค๋Ÿฌ ์„ค์น˜ -> IRSA ์„ค์ • -> AWS ๋ฆฌ์†Œ์Šค ์ปจํŠธ๋กค
    • ๊ฐ™์€ ํŒจํ„ด์œผ๋กœ ์ด๋ฃจ์–ด์ ธ์žˆ๋Š”๋ฐ, Cloudformation์„ ์“ฐ๋‹ค๋ณด๋‹ˆ ์ค‘๊ฐ„์ค‘๊ฐ„ ๋Œ€๊ธฐ ์‹œ๊ฐ„ ๋ฐœ์ƒ
  • (23/05/29) GA: 17๊ฐœ ์„œ๋น„์Šค, Preview: 10๊ฐœ ์„œ๋น„์Šค

2-1. S3

  • [ACK S3 Controller ์„ค์น˜]
# ์„œ๋น„์Šค๋ช… ๋ณ€์ˆ˜ ์ง€์ •
export SERVICE=s3

# helm ์ฐจํŠธ ๋‹ค์šด๋กœ๋“œ
export RELEASE_VERSION=$(curl -sL https://api.github.com/repos/aws-controllers-k8s/$SERVICE-controller/releases/latest | grep '"tag_name":' | cut -d'"' -f4 | cut -c 2-)
helm pull oci://public.ecr.aws/aws-controllers-k8s/$SERVICE-chart --version=$RELEASE_VERSION
tar xzvf $SERVICE-chart-$RELEASE_VERSION.tgz

# helm chart ํ™•์ธ
tree ~/$SERVICE-chart

# ACK S3 Controller ์„ค์น˜
export ACK_SYSTEM_NAMESPACE=ack-system
export AWS_REGION=ap-northeast-2
helm install --create-namespace -n $ACK_SYSTEM_NAMESPACE ack-$SERVICE-controller --set aws.region="$AWS_REGION" ~/$SERVICE-chart

# ์„ค์น˜ ํ™•์ธ
helm list --namespace $ACK_SYSTEM_NAMESPACE
kubectl -n ack-system get pods
kubectl get crd | grep $SERVICE

kubectl get all -n ack-system
kubectl get-all -n ack-system
kubectl describe sa -n ack-system ack-s3-controller
  • [IRSA ์„ค์ •] AmazonS3FullAccess
    • ์„ค์ • ํ›„์—๋Š” rollout์œผ๋กœ ๋ฐ˜์˜ํ•ด์ฃผ์–ด์•ผํ•จ
# Create an iamserviceaccount - AWS IAM role bound to a Kubernetes service account
eksctl create iamserviceaccount \
  --name ack-$SERVICE-controller \
  --namespace ack-system \
  --cluster $CLUSTER_NAME \
  --attach-policy-arn $(aws iam list-policies --query 'Policies[?PolicyName==`AmazonS3FullAccess`].Arn' --output text) \
  --override-existing-serviceaccounts --approve

# ํ™•์ธ
eksctl get iamserviceaccount --cluster $CLUSTER_NAME
kubectl get sa -n ack-system
kubectl describe sa ack-$SERVICE-controller -n ack-system

# Restart ACK service controller deployment using the following commands.
kubectl -n ack-system rollout restart deploy ack-$SERVICE-controller-$SERVICE-chart

# IRSA ์ ์šฉ์œผ๋กœ Env, projected Volume ์ถ”๊ฐ€ ํ™•์ธ
kubectl describe pod -n ack-system -l k8s-app=$SERVICE-chart

ISRA with override

gh-pages์— ๋Œ“๊ธ€ ๊ธฐ๋Šฅ ์ถ”๊ฐ€ํ•˜๊ธฐ(giscus/Hugo)

  • kkumtree

2023-06-04T09:15:14+09:00

์š”์•ฝ

์•ž์œผ๋กœ ๊ฐ€๊ฐ์—†๋Š” ํ”ผ๋“œ๋ฐฑ ํ™˜์˜ํ•ฉ๋‹ˆ๋‹ค.

https://github.com/kkumtree/blog.minseong.xyz/commit/e17822e72e8d357dcdbda1025c5372161a7b93ff

๋ฐฐ๊ฒฝ

gh-pages๋กœ ๋ธ”๋กœ๊ทธ๋ฅผ ๊ตฌ์ถ•ํ•ด์„œ, ์ฒซ ๊ฒŒ์‹œ๋ฌผ์„ ์˜ฌ๋ฆฐ ์ง€ ๋งŒ 4๊ฐœ์›”์ด ์ง€๋‚ฌ๋‹ค.
๊ตฌ์ถ•๊ธฐ๋Š” ๋‚˜์ค‘์— ์˜ฌ๋ ค์•ผ์ง€.

๊ธ‰ํžˆ ๋ฒค์น˜๋งˆํ‚นํ•ด์„œ ์˜ฌ๋ฆฐ๊ฑฐ๋ผ, ๋ถ€์กฑํ•œ ์ ์€ ๋งŽ์ง€๋งŒ ๊ฐ€์žฅ ์ค‘์š”ํ•œ ๋Œ“๊ธ€ ๊ธฐ๋Šฅ์ด ์—†์–ด์„œ ์•„์‰ฌ์› ๋‹ค.

์›๋ž˜๋Š” ๋Œ“๊ธ€์„ ๋‹ฌ์ง€ ์•Š์œผ๋ ค๊ณ  ํ–ˆ๋Š”๋ฐ,

  • ๋ถ€์กฑํ•œ ๋ถ€๋ถ„์— ๋Œ€ํ•ด์„œ ์กฐ์–ธ๋„ ๋ฐ›์•„๋ณด๊ณ  ์‹ถ๊ณ 
  • ์ถ”๊ฐ€๋กœ ๊ถ๊ธˆํ•œ ์ ์ด๋‚˜ ์ดํ•ด๊ฐ€ ์•ˆ๋˜๋Š” ๋ถ€๋ถ„์— ๋Œ€ํ•ด์„œ ํ”ผ๋“œ๋ฐฑ๋„ ๋ฐ›๊ณ  ์‹ถ์—ˆ๋‹ค.

๋‹ค๋ฅธ ๋ธ”๋กœ๊ทธ์—์„œ ๋‹ต์„ ์ฐพ์œผ๋ ค๊ณ  ๊ฒ€์ƒ‰์—”์ง„์„ ๋Œ๋ฆฌ๋ฉด, ๋ญ”๊ฐ€ 2% ๋ถ€์กฑํ•˜๊ฑฐ๋‚˜ / ๋‚ด๊ฐ€ ์›ํ•˜๋Š” ํ•ด๋‹ต์ด ์•„๋‹ˆ๊ฑฐ๋‚˜ / ๋งค๋ฒˆ ์ด๋ชจํ‹ฐ์ฝ˜์œผ๋กœ ๋๋‚˜๋Š” ํŠน์œ ์˜ ํ—ˆํƒˆ๊ฐ์œผ๋กœ ์งœ์ฆ์ด ๋ฐ€๋ ค์™€์„œ ๋ฒˆ์—ญ๊ธฐ ๋Œ๋ ค๊ฐ€๋ฉฐ ๊ตญ์™ธ ํฌ์ŠคํŠธ๋‚˜ ๋ฌธ์„œ๋ฅผ ๋ณด๋‹ค๋ณด๋‹ˆ, ๋ฐ˜๋Œ€๋กœ ๋‚ด ๊ธ€๋„ ํฐ ๋„์›€์ด ๋˜์ง€ ๋ชปํ•  ๊ฒฝ์šฐ๋„ ์žˆ๊ฒ ๋‹ค ์‹ถ์—ˆ๋‹ค. ๊ทธ๋ž˜์„œ ๋Œ“๊ธ€ ๊ธฐ๋Šฅ์„ ์ถ”๊ฐ€ํ•˜๊ธฐ๋กœ ํ–ˆ๋‹ค.

AWS EKS ์Šคํ„ฐ๋”” 6์ฃผ์ฐจ - Security

  • kkumtree

2023-06-04T06:56:52+09:00

์ด๋ฒˆ์—๋Š” ๋ณด์•ˆ์„ ์œ„ํ•œ ์ธ์ฆ ๋ฐ ์ธ๊ฐ€, ๊ทธ๋ฆฌ๊ณ  IRSA๋ฅผ ์ค‘์‹ฌ์œผ๋กœ EKS์˜ ๋ณด์•ˆ์— ๋Œ€ํ•ด ํ•™์Šตํ•ด๋ณด์•˜์Šต๋‹ˆ๋‹ค.

kops ์Šคํ„ฐ๋”” ๋•Œ์—๋Š” ์ž˜ ๋ชฐ๋ž๋Š”๋ฐ, RBAC ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ ๋ณต๊ธฐํ•˜๋‹ค๋ณด๋‹ˆ…

  • [4-1] projected Volume
  • [4-2] AWS Load Balancer Controller IRSA ๋ฐ LB Pod mutating

์œ„์˜ ๋‘ ๊ฐ€์ง€๊ฐ€ ์ค‘์š”ํ•œ ํŒŒํŠธ๋ฅผ ์ฐจ์ง€ํ•˜๊ณ  ์žˆ์—ˆ์Œ์„ ์•Œ ์ˆ˜ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค.
Network(2์ฃผ์ฐจ)๊ฐ€ ๋งค๋ฒˆ ๋ญ”๊ฐ€ ์ผ๋ถ€๊ฐ€ ์•„๋ฆฌ์†กํ•˜์˜€๋‹ค๋ฉด
Security๋Š” ๋ณต๊ธฐํ•˜๋‹ค๊ฐ€ ์ด๋ก ์ ์œผ๋กœ๋Š” ๊ฐ„๋‹จ(๊ณผ์—ฐ?)ํ•ด๋ณด์—ฌ๋„
์‹ค์ œ ๊ตฌ๋™๋ฐฉ์‹ ์ดํ•ด ์ž์ฒด๊ฐ€ ์ดˆ๋ฐ˜์— ์•ˆ๋˜์„œ, ์‚ฌํ˜ ๋‚จ์ง“ ๊ฑธ๋ฆฐ ๋•์— ๋” ์–ด๋ ค์› ๋˜ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

๊ทธ ์™ธ

  1. myeks-bastion-2์— ์ ‘์† ์‹œ, ํ•จ๊ป˜ ์ง„ํ–‰ํ•  ๋•Œ๋Š” ssh {Public IP}๋กœ ์ž˜ ์ ‘์†๋˜๋Š” ๊ฑธ ๋ดค๋Š”๋ฐ ์ •์ž‘ ํ˜ผ์ž ํ•  ๋• ์ ‘์†์ด ๋˜์ง€์•Š์•˜์Šต๋‹ˆ๋‹ค.
    • Amazon Linux์—์„œ๋Š” ssh ec2-user@{Public IP}๋กœ ์ ‘์†ํ•ด์•ผํ•จ
      (ํ•„์š”ํ•œ ๊ฒฝ์šฐ sshํ‚ค๋„ ํฌํ•จ)
    • AWS Public AMI์—์„œ ์ œ๊ณต๋˜๋Š” Ubuntu AMI์˜ ๊ฒฝ์šฐ,
      ubuntu@{Public IP}๋กœ ์ ‘์†๊ฐ€๋Šฅ
    • ์ถ”์ •: ๊ณต์œ ๋œ ๋จธ์‹ ์— ๋‹ค๋ฅธ ์„ค์ •์ด ์ด์Šˆ๊ฐ€ ๋˜๋Š” ๊ฒƒ์œผ๋กœ ์ถ”์ •๋ฉ๋‹ˆ๋‹ค. ssh failure 1 ssh failure 2
  2. IAM User(testuser)๋Š” ์›น์ฝ˜์†”์—์„œ ์‚ญ์ œํ•˜๋Š” ๊ฒƒ์ด ํŽธ๋ฆฌํ•ฉ๋‹ˆ๋‹ค.
    • ์•„๋‹ˆ๋ฉด, ์•„๋ž˜์ฒ˜๋Ÿผ detach ํ•œ๋‹ค๋Š” ๋А๋‚Œ์œผ๋กœ ์ˆœ์ฐจ์  ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค.
      • list-attached-role-policies && detach-role-policy
      • list-access-keys && delete-access-key
      • delete-user delete user with cli
  3. CLI๋กœ IAM Trust Relationship ์กฐํšŒ
    • ์›น ์ฝ˜์†”์— ๊ตณ์ด ๋“ค์–ด๊ฐ€์•ผํ•˜๋‚˜ ํ•˜๊ณ , ๋ฌธ๋“ ํ˜ธ๊ธฐ์‹ฌ์— ์‹œ๋„ํ•˜๋‹ค๊ฐ€ ์‹œ๊ฐ„์ด ๋‚ ์•„๊ฐ”์Šต๋‹ˆ๋‹ค.
    • ๊ฒฐ๋ก : ํ•˜๋“œ์ฝ”์–ดํ•œ ํŒŒ์‹ฑ..
      • jq -r '.[].status.roleARN' | rev | cut -d '/' -f1 | rev
      • chatGPT์—๊ฒŒ ์•„๋ž˜์™€ ๊ฐ™์ด ๊ต์ • ๋ฐ›์•˜์ง€๋งŒ, ํƒํƒ์น˜ ์•Š์Œ..
        jq -r '.[].status.roleARN' | grep -oE '[^/]+$'
        iam trust relationship with cli

1. ์‹ค์Šต ํ™˜๊ฒฝ ๋ฐฐํฌ

  • ๋ชจ์˜๊ณต๊ฒฉ(?) ํ…Œ์ŠคํŠธ๋ฅผ ์œ„ํ•ด 2๊ฐœ์˜ bastion ์„œ๋ฒ„๊ฐ€ ๊ตฌ์„ฑ๋œ ํ™˜๊ฒฝ ๋ฐฐํฌ
  • p8s ๋ฐ grafana์˜ ๊ฒฝ์šฐ, ์„ ํƒ์ ์œผ๋กœ ๋ฐฐํฌํ•ด๋„ ๋˜์„œ ๊ธฐ์ˆ  ์ƒ๋žต
curl -O https://s3.ap-northeast-2.amazonaws.com/cloudformation.cloudneta.net/K8S/eks-oneclick5.yaml

# ์ดํ•˜ ์ค‘๋žต

# CERT_ARN(ACM)์˜ ๊ฒฝ์šฐ์—๋Š” /etc/profile์— ํ™˜๊ฒฝ๋ณ€์ˆ˜ ์ €์žฅ์„ ์•ˆํ•ด๋‘ฌ์„œ  
# ์„ธ์…˜์ด ๋งŒ๋ฃŒ๋˜๋ฉด, ๋‹ค์‹œ ์žฌ์„ค์ • ํ•„์š”

CERT_ARN=`aws acm list-certificates --query 'CertificateSummaryList[].CertificateArn[]' --output text`
echo $CERT_ARN

2. k8s ์ธ์ฆ/์ธ๊ฐ€

  • .kube/config ํŒŒ์ผ์„ ๊ธฐ๋ฐ˜
    • cluster: k8s API ์„œ๋ฒ„ ์ ‘์†์ •๋ณด
    • users: API ์„œ๋ฒ„์— ์ ‘์†ํ•˜๊ธฐ ์œ„ํ•œ ์œ ์ € ์ธ์ฆ์ •๋ณด ๋ชฉ๋ก
    • contexts: cluster๋ฐ user๋ฅผ ๋งคํ•‘(์กฐํ•ฉ)ํ•œ ์ •๋ณด

kubeconfig

GnuPG ํ‚ค ๋ฐฑ์—…ํ•˜๊ธฐ

  • kkumtree

2023-05-27T18:29:18+09:00

23/05/30 GPG ํ‚ค ๋ณต์›๋ฐฉ๋ฒ• ๋ฐ ์ถœ์ฒ˜ ์ถ”๊ฐ€

๋ง๊ฐ€์ง„ PC ๋ฉ”์ธ๋ณด๋“œ๋ฅผ ๊ต์ฒดํ•˜๊ณ , ์„œ๋‘˜๋Ÿฌ GPG key๋ฅผ ๋ฐฑ์—…ํ•˜์˜€์Šต๋‹ˆ๋‹ค.
์šฉ๋Ÿ‰์ด ๊ทธ๋ฆฌ ํฐํŽธ์€ ์•„๋‹ˆ๋‹ˆ, ์™ ๋งŒํ•œ USB ๋ฉ”๋ชจ๋ฆฌ์—๋„ ์ถฉ๋ถ„ํžˆ ๋ฐฑ์—…์ด ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.
(์–ด์งธ์„œ ์•ˆํ–ˆ์—ˆ์„๊ผฌ…)

์ถœ์ฒ˜๋Š” ๋งˆ์ง€๋ง‰ referenece๋ฅผ ์ฐธ์กฐํ•ด์ฃผ์‹œ๊ธฐ ๋ฐ”๋ž๋‹ˆ๋‹ค.

1. Backup

# tree๋กœ ~/.gnupg ํ™•์ธ
tree ~/.gnupg

# ํ˜„์žฌ ์‚ฌ์šฉ์ค‘์ธ ํ‚ค ํ™•์ธ
gpg --list-secret-keys --keyid-format LONG

# ํ‚ค ๋ฐฑ์—…

## public ํ‚ค ๋ฐฑ์—…
gpg --export --export-options backup --output ~/public_mscho.gpg

## private ํ‚ค ๋ฐฑ์—… (์•”ํ˜ธ ์ž…๋ ฅ ํ•„์š”)
gpg --export-secret-keys --export-options backup --output ~/private_mscho.gpg

## trust(์‹ ๋ขฐ๊ด€๊ฒŒ) ๋ฐฑ์—…
gpg --export-ownertrust > trust_mscho.gpg

# ๋ฐฑ์—…ํ•œ ํ‚ค ํ™•์ธ
ls -al ~/*.gpg

# ๋ฐฑ์—…ํ•œ ํ‚ค๋ฅผ USB๋กœ ๋ณต์‚ฌ

## ์ด๋ฏธ ๋งˆ์šดํŠธ๋œ ๋ฏธ๋””์–ด ํ™•์ธ(๋ณผ๋ฅจ์ด๋ฆ„ KEYS์— ๋ณด๊ด€ํ•  ๊ณ„ํš)
tree /media

## (์˜ต์…˜)ํ•˜์œ„ ํด๋” ์ƒ์„ฑ
mkdir /media/KEYS/GnuPG

## ํ‚ค ๋ณต์‚ฌ
cp ~/*.gpg /media/KEYS/GnuPG

## ๋ณต์‚ฌํ•œ ํ‚ค ํ™•์ธ
ls -al /media/kkumtree/KEYS/GnuPG/*.gpg

backup

AWS EKS ์Šคํ„ฐ๋”” 5์ฃผ์ฐจ - Autoscaling

  • kkumtree

2023-05-22T19:23:37+09:00

์ด๋ฒˆ ์ฃผ์ฐจ๋Š” ์˜คํ† ์Šค์ผ€์ผ๋ง์„ ๋ฉ”์ธ์œผ๋กœ ํ•˜์—ฌ, ์ˆ˜ํ‰/์ˆ˜์ง ํ”„๋กœ๋น„์ €๋‹์„ ํ•™์Šตํ•ด๋ณด์•˜์Šต๋‹ˆ๋‹ค.
๋งˆ์ง€๋ง‰์—๋Š” ๊ณ ์„ฑ๋Šฅ ์˜คํ† ์Šค์ผ€์ผ๋Ÿฌ์ธ Karpenter๋ฅผ ๋ณ„๋„๋กœ ์‹ค์Šตํ•ด๋ณด์•˜์Šต๋‹ˆ๋‹ค. ํŠนํžˆ..

  • HPA custom metrics(์‚ฌ์šฉ์ž ์ •์˜ ๋ฉ”ํŠธ๋ฆญ) ์ ์šฉ

  • YAML ์„ค์ •๊ฐ’์„ CPU๋กœ ๋งž์ถ˜ ๊ฒƒ์„ ์žŠ๊ณ , ํ”„๋กœ๋น„์ €๋‹์„ ์ž˜๋ชป ์˜ˆ์ธกํ•œ ๊ฒƒ๋„ ํ•จ๊ป˜ ๊ณต์œ ํ•ฉ๋‹ˆ๋‹ค.

  • AutoScaling

    • HPA: Horizontal Pod Autoscaler
    • VPA: Vertical Pod Autoscaler
    • CA: Cluster Autoscaler
      • ๊ฐ CSP ์˜์กด์ , ์›Œ์ปค ๋…ธ๋“œ ๋ ˆ๋ฒจ์—์„œ์˜ ์˜คํ† ์Šค์ผ€์ผ๋ง

1. ์‹ค์Šต ํ™˜๊ฒฝ ๋ฐฐํฌ

  • 4์ฃผ์ฐจ์˜ ์ดˆ๊ธฐ ๋ฐฐํฌ ๋‚ด์šฉ์— p8s ๋ฐ Grafana๋ฅผ ์ถ”๊ฐ€ํ•˜์—ฌ ๋ฐฐํฌ
    • verticalPodAutoscaler ํ™œ์„ฑํ™”
    • ์ถ”์ฒœ ๋Œ€์‹œ๋ณด๋“œ: 15757, 17900, 15172
curl -O https://s3.ap-northeast-2.amazonaws.com/cloudformation.cloudneta.net/K8S/eks-oneclick4.yaml

# ์ดํ•˜ ์ค‘๋žต

## Prometheus & Grafana ์„ค์น˜

# ์ธ์ฆ์„œ ARN
CERT_ARN=`aws acm list-certificates --query 'CertificateSummaryList[].CertificateArn[]' --output text`
echo $CERT_ARN

# ํŒŒ๋ผ๋ฏธํ„ฐ ํŒŒ์ผ ์ƒ์„ฑ ๋ฐ ๋ฐฐํฌ
cat <<EOT > monitor-values.yaml
prometheus:
  prometheusSpec:
    podMonitorSelectorNilUsesHelmValues: false
    serviceMonitorSelectorNilUsesHelmValues: false
    retention: 5d
    retentionSize: "10GiB"

  verticalPodAutoscaler:
    enabled: true

  ingress:
    enabled: true
    ingressClassName: alb
    hosts: 
      - prometheus.$MyDomain
    paths: 
      - /*
    annotations:
      alb.ingress.kubernetes.io/scheme: internet-facing
      alb.ingress.kubernetes.io/target-type: ip
      alb.ingress.kubernetes.io/listen-ports: '[{"HTTPS":443}, {"HTTP":80}]'
      alb.ingress.kubernetes.io/certificate-arn: $CERT_ARN
      alb.ingress.kubernetes.io/success-codes: 200-399
      alb.ingress.kubernetes.io/load-balancer-name: myeks-ingress-alb
      alb.ingress.kubernetes.io/group.name: study
      alb.ingress.kubernetes.io/ssl-redirect: '443'

grafana:
  defaultDashboardsTimezone: Asia/Seoul
  adminPassword: prom-operator

  ingress:
    enabled: true
    ingressClassName: alb
    hosts: 
      - grafana.$MyDomain
    paths: 
      - /*
    annotations:
      alb.ingress.kubernetes.io/scheme: internet-facing
      alb.ingress.kubernetes.io/target-type: ip
      alb.ingress.kubernetes.io/listen-ports: '[{"HTTPS":443}, {"HTTP":80}]'
      alb.ingress.kubernetes.io/certificate-arn: $CERT_ARN
      alb.ingress.kubernetes.io/success-codes: 200-399
      alb.ingress.kubernetes.io/load-balancer-name: myeks-ingress-alb
      alb.ingress.kubernetes.io/group.name: study
      alb.ingress.kubernetes.io/ssl-redirect: '443'

defaultRules:
  create: false
kubeControllerManager:
  enabled: false
kubeEtcd:
  enabled: false
kubeScheduler:
  enabled: false
alertmanager:
  enabled: false
EOT

kubectl create ns monitoring
helm install kube-prometheus-stack prometheus-community/kube-prometheus-stack --version 45.27.2 \
--set prometheus.prometheusSpec.scrapeInterval='15s' --set prometheus.prometheusSpec.evaluationInterval='15s' \
-f monitor-values.yaml --namespace monitoring

# metrics-server ๋ฐฐํฌ
kubectl apply -f https://github.com/kubernetes-sigs/metrics-server/releases/latest/download/components.yaml

1-1. EKS Node Viewer ์„ค์น˜

  • ํŒŒ๋“œ ๋ฆฌ์†Œ์Šค์— ๋Œ€ํ•œ ์š”์ฒญ ์ •๋ณด๋ฅผ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋Š” ๋Œ€์‹œ๋ณด๋“œ
    • ํ•ด๋‹น ๋…ธ๋“œ์— ํ• ๋‹น ๊ฐ€๋Šฅํ•œ ์šฉ๋Ÿ‰์„ ์‹œ๊ฐ์ ์œผ๋กœ ํ‘œ์‹œ
  • ์‹ค์ œ ์‚ฌ์šฉ๋Ÿ‰์ด ์•„๋‹ˆ๋ผ, ์š”์ฒญ๋œ ๋ฆฌ์†Œ์Šค(CPU, Memory)์— ๋Œ€ํ•œ ํ‘œ์‹œ
  • ์‹ค์Šต ์Šค์ฑ… ์ƒ์—์„œ go ์„ค์น˜ ๋ฐ ๋ทฐ์–ด ์„ค์น˜์‹œ ๋‹ค์†Œ ์‹œ๊ฐ„์ด ์†Œ์š” (์•ฝ 5๋ถ„)
  • Karpenter ์‹ค์Šต ์‹œ์—๋„ ์–ธ๊ธ‰๋˜๊ฒ ์ง€๋งŒ, EKS๊ฐ€ ๊ตฌ์ถ•๋œ ๋’ค์— ์‚ฌ์šฉ์ด ๊ฐ€๋Šฅํ•˜๋‹ค.
# go ๋ฐ EKS Node Viewer ์„ค์น˜
yum install -y go
go install github.com/awslabs/eks-node-viewer/cmd/eks-node-viewer@latest

# EKS Node Viewer ์‹คํ–‰
tree ~/go/bin
cd ~/go/bin && ./eks-node-viewer

## EKS Node Viewer ๋ช…๋ น ์ƒ˜ํ”Œ
# Display both CPU and Memory Usage
./eks-node-viewer --resources cpu,memory

# Karenter nodes only
./eks-node-viewer --node-selector "karpenter.sh/provisioner-name"

# Display extra labels, i.e. AZ
./eks-node-viewer --extra-labels topology.kubernetes.io/zone

# Specify a particular AWS profile and region
AWS_PROFILE=myprofile AWS_REGION=ap-northeast-2

## ๊ธฐ๋ณธ ์˜ต์…˜ ํ™˜๊ฒฝ ๋ณ€์ˆ˜
# select only Karpenter managed nodes
node-selector=karpenter.sh/provisioner-name

# display both CPU and memory
resources=cpu,memory

EKS node viewer

AWS EKS ์Šคํ„ฐ๋”” 4์ฃผ์ฐจ - Observability

  • kkumtree

2023-05-21T06:13:52+09:00

์ด๋ฒˆ ์ฃผ์ฐจ์—๋Š” Observability์— ๋Œ€ํ•ด ์Šคํ„ฐ๋””๊ฐ€ ์ง„ํ–‰๋˜์—ˆ์Šต๋‹ˆ๋‹ค.
์ž์› ๋ชจ๋‹ˆํ„ฐ๋ง ํˆด๋“ค์˜ ์ ์šฉ ๋ฐ ์‚ฌ์šฉ์ด ์ค‘์‹ฌ์ž…๋‹ˆ๋‹ค.

๊ทธ๋‚˜์ €๋‚˜ k8s 1.26์—์„œ metrics์˜ ์ผ๋ถ€ ๋ช…์นญ์ด ๋ฐ”๋€Œ๋Š” ๊ฑธ ๋ณด๊ณ  ์‹๊ฒํ–ˆ์Šต๋‹ˆ๋‹ค.
(etcd_db_total_size_bytes ๋Œ€์‹ , apiserver_storage_db_total_size_in_bytes ์œผ๋กœ ๋ณ€๊ฒฝ)
๋˜ํ•œ kubecost์˜ ๊ฒฝ์šฐ, cloudformation ์Šคํƒ ์ œ๊ฑฐ ํ›„์—๋„ ๋ณผ๋ฅจ ๋ฐ์ดํ„ฐ๊ฐ€ ๋‚จ์•„์žˆ์–ด์„œ ๋ณ„๋„๋กœ ์‚ญ์ œํ•ด์•ผ ํ–ˆ์Šต๋‹ˆ๋‹ค.

1. ์‹ค์Šตํ™˜๊ฒฝ ๋ฐฐํฌ

  • NAT๊ฒŒ์ดํŠธ์›จ์ด, EBS addon, IAM role, ISRA for LB/EFS, PreCommand ํฌํ•จ
  • ๋…ธ๋“œ: t3.xlarge
    • t3a.xlarge(AMD)๋Š” ์„œ์šธ ๋ฆฌ์ „ b AZ(ap-northeast-2b)์—์„œ ๋ฏธ์ง€์›
  • ๋” ๋งŽ์€ ๊ฐ’๋“ค์ด ์ž…๋ ฅ๋˜์–ด์„œ, ์ƒ์„ฑ ์™„๋ฃŒ๊นŒ์ง€ ๋” ๋งŽ์€ ์‹œ๊ฐ„์ด ์†Œ์š” (์•ฝ 20์—ฌ๋ถ„ ์ด๋‚ด)
curl -O https://s3.ap-northeast-2.amazonaws.com/cloudformation.cloudneta.net/K8S/eks-oneclick3.yaml

# ์ดํ•˜ ์ƒ๋žต, 3์ฃผ์ฐจ ์ฐธ๊ณ 

cloudformation

aws-cli๋ฅผ ์ด์šฉํ•œ bastion CIDR ๋ณ€๊ฒฝ

  • kkumtree

2023-05-18T21:36:19+09:00

0. ์š”์•ฝ

aws ec2 describe-security-groups 
aws ec2 modify-security-group-rules 

1. ๋ฐฐ๊ฒฝ

intro

2์ฃผ ์ „์— ๋ฌธ๋“ ์ด๋Ÿฐ ์งˆ๋ฌธ์„ ์˜ฌ๋ ธ๋˜ ์ ์ด ์žˆ์—ˆ๋‹ค.
๋ฌผ๋ก  ๋ฐ”๊พธ๋ฉด ์•ˆ๋  ์ผ์€ ์—†์—ˆ๋Š”๋ฐ ์ด๋ ‡๊ฒŒ ํ•˜๋Š”๊ฒŒ ๋งž๋‚˜ ํ™•์‹ ์ด ๋ชจ์ž๋ผ์„œ ์˜๊ฒฌ์„ ์—ฌ์ญค๋ดค์—ˆ๊ณ ,
์ด๊ฒŒ ๋งž๋‹ค๋Š” ํ™•์‹ ์„ ๋ฐ›์•˜๋‹ค.

๊ทธ๋ฆฌ๊ณ  ์˜ค๋Š˜… ์นดํŽ˜๋ฅผ ๋‘ ๊ณณ์ด๋‚˜ ๋“ค๋ฆฌ๋ฉด์„œ ํ•˜๋А๋ผ ์•ฝ๊ฐ„์˜ ๋ฒˆ๊ฑฐ๋กœ์›€๋„ ์žˆ๊ณ  AWS ์›น ์ฝ˜์†”์—์„œ ํ•˜๋ ค ํ–ˆ๋‹ค.

๊ทธ๋Ÿฐ๋ฐ, ์œ ๋… SG์—์„œ๋งŒ ํŽ˜์ด์ง€ ๋กœ๋”ฉ์ด timeout ๊ฑธ๋ ค์„œ,
๋„์ €ํžˆ ์ˆ˜์ •์€ ์ปค๋…• ํ•ด๋‹น ID๋„ ํŒŒ์•…์„ ํ•˜๊ธฐ ํž˜๋“  ์ƒํ™ฉ์ด ๋˜์—ˆ๋‹ค.

  1. <<
  2. <
  3. 1
  4. 2
  5. 3
  6. 4
  7. 5
  8. 6
  9. >
  10. >>

kkumtree

Source code on GitHub

ยฉ 2025 kkumtree and contributors All rights reserved.
Licensed under
CC BY-NC-ND 4.0