
์ค๋๋ง์ ์์ฑํ๋ ๋ธ๋ก๊ทธ์
๋๋ค.
์
๋ฌด์์ผ๋ก ์ธ๋ถ์ ๋ง์ด ๋๊ฐ๋ฉด์ ์์ํ๊ฒ ์๊ฐ์ด ๋ถ์กฑํ๊ธฐ๋ ํ๊ณ , ์ฐธ์ฌํ ์์
๋ค์ ๊ท๋ชจ๊ฐ ์๊ฐ๋ณด๋ค ์ปค์ ๊ฒฐ๋ก ์ด ๋๋ ๋ฐ ๊ฝค ๊ฑธ๋ ธ๋ ๊ฒ ๊ฐ๋ค์.
๋ค๋ฅธ ์ผ๋ค์ ๊ธฐํ๊ฐ ๋๋ฉด ๋์ค์ ์ ์ด ๋ณด๋ ๊ฒ์ผ๋ก ํ๊ณ ,
์ต๊ทผ ์ค์ํ๊ฒ ์งํํ๊ณ ์๋ ์์
์ ์ฌ๋ด ๋ฐฐํฌ ํ๊ฒฝ์ Kubernetes๋ก ์ ํํ๋ ๊ฒ์
๋๋ค.
์ด ๊ธ์ ์์์ผ๋ก Kubernetes ์ ํ ๊ณผ์ ์์ ๊ฒช์ ์ด๋ ค์๊ณผ ํด๊ฒฐ ๋ฐฉ๋ฒ๋ค์ ์ ๋ฆฌํด ๋ณด๋ ค๊ณ ํฉ๋๋ค.
1๋ฒ ํ์, Azure
ํ์ฌ ํ์ฌ์์๋ AWS์ Azure๋ฅผ ๋ชจ๋ ์ฌ์ฉํ๊ณ ์์ต๋๋ค.
๋ฌผ๋ก ํด๋ผ์ฐ๋ ์์ฅ์์๋ AWS๊ฐ ์ ์ ์จ์ด ๊ฐ์ฅ ๋์ง๋ง, Azure๋ ์ผ๋ณธ์์ ๋งค์ฐ ๋์ ์ ์ ์จ๊ณผ ์ ๋ขฐ๋๋ฅผ ๋ณด์ ํ๊ณ ์๊ณ Azure ํ๊ฒฝ์ ๊ตฌ์ฑํ๋ ๊ฒ์ด ์๊ตฌ์ฌํญ์ ํฌํจ๋๋ ๊ฒฝ์ฐ๋ ์์ต๋๋ค.
์ผ๋ณธ ์ชฝ ๊ณ ๊ฐ์ด ์๋นํ ๋ง๊ธฐ ๋๋ฌธ์ ์ผ๋ณธ ์ชฝ์ ์ธํ๋ผ ๋ฌธ์ ๋ฅผ ์ฐ์ ์ ์ผ๋ก ๊ฐ์ ํ๋ ๊ฒ์ด ๋งค์ฐ ์ค์ํ์ต๋๋ค.
๊ทธ๋์ ์ฒซ ๋ฒ์งธ Kubernetes ํ๊ฒฝ์ AKS(Azure Kubernetes Service)๋ฅผ ํ์ฉํ์ฌ ๊ตฌ์ถํ๊ฒ ๋์์ต๋๋ค.
NAT Gateway
Kubernetes ํ๊ฒฝ์ ๊ตฌ์ถํ ๋ ๊ฐ์ฅ ์ค์ํ๋ ๊ฒ์ ๋คํธ์ํฌ ์ค์ ์ด์์ต๋๋ค.
๊ทธ์ค์์๋ NAT Gateway๋ฅผ ์ฐ์ ๊ตฌ์ฑํ ํ์๊ฐ ์์์ต๋๋ค.
NAT Gateway๋ Kubernetes ํด๋ฌ์คํฐ์ ์ธํฐ๋ท์ ์ค๊ฐ์ ์์นํด์ ๋ถํ์ํ ํธ๋ํฝ์ ์ฐจ๋จํ๊ณ ๋ณด์์ ๊ฐํํ๋ ๋ฐ ๋์์ด ๋ฉ๋๋ค.
๊ธฐ๋ณธ์ ์ผ๋ก ์์๋ฐ์ด๋ ํธ๋ํฝ, ์ฆ ๋๊ฐ๋ ํธ๋ํฝ๊ณผ ๊ทธ ์๋ต์ผ๋ก ๋์์ค๋ ํธ๋ํฝ๋ง NAT Gateway๋ฅผ ํต๊ณผํ ์ ์์ต๋๋ค.
์กฐ๊ธ ๋ ํ์ค์ ์ธ ์ด์ ๋ก๋, ์ผ๋ณธ์ ์๋น์ ๊ณ ๊ฐ๋ค์ด ์ธ๋ถ ์๋น์ค ์ฌ์ฉ ์ ํน์ IP ๋์ญ๋ง ๋ฐฉํ๋ฒฝ์ ๊ฐ๋ฐฉํ๊ธฐ ๋๋ฌธ์ ๊ฐ๊ธ์ ๋ณ๊ฒฝ๋์ง ์๋ IP ๋์ญ์ ๋๊ณ , ๋ณ๊ฒฝ์ด ํ์ํ ๊ฒฝ์ฐ ์ด๋ฅผ ์ฌ์ ์ ์๋ดํด์ผ ํ๊ธฐ ๋๋ฌธ์ ๋๋ค. ๊ทธ๋์ NAT Gateway๋ฅผ ๊ตฌ์ฑํด ๋๋ฉด Kubernetes ํด๋ฌ์คํฐ์ ๋ณ๊ฒฝ์ด ์๊ธฐ๋๋ผ๋ ๊ณ ์ ๋ ์ฃผ์๋ก ์๋น์ค๋ฅผ ์ ๊ณตํ ์ ์๋ค๋ ์ ์ญ์ ํฐ ์ด์ ์์ต๋๋ค.
NAT Gateway๋ Stack Overflow์ ๊ณต์ ๋ฌธ์๋ฅผ ์ฐธ๊ณ ํ์ฌ ๊ตฌ์ฑํ์์ต๋๋ค.
์ฐธ๊ณ ๋ก, ๋ณ๋ ์ค์ ์ ํ์ง ์๋๋ค๋ฉด NAT Gateway๋ Zone-redundant, ์ฆ ํน์ Availability zone์ ์ข
์๋์ง ์๋ ํํ๋ก ๋ถ์ฐ๋์ด ๊ตฌ์ฑ๋ฉ๋๋ค.
์ ํฌ๋ ํด๋น ์ค์ ์ด ์๋์ ๋ง์๊ธฐ ๋๋ฌธ์ ๋ณ๋ ์กฐ์น๋ฅผ ํ์ง ์์๋๋ฐ, ํน์ ๋ฆฌ์ ์ ์ง์ ํด์ผ ํ๋ค๋ฉด ์ค์ ์ ์ถ๊ฐํด์ผ ํฉ๋๋ค.
Azure Load Balancer์ Azure Application Gateway
Azure Load Balancer๋ ๊ตฌ์ถ ๊ณผ์ ์์ ๊ฐ์ฅ ๋ฌธ์ ๋ฅผ ๋ง์ด ์ผ์ผํจ ๋ถ๋ถ์ด์์ต๋๋ค.
๊ธฐ์กด AWS ํ๊ฒฝ์์๋ Kubernetes ํด๋ฌ์คํฐ์ NGINX Ingress Controller๋ฅผ ALB(Application Load Balancer)๋ก ์ฐ๊ฒฐํ์ฌ ์ฌ์ฉํ๊ณ ์์๊ณ , ๋ณ๋์ ์ค์ ๋ณ๊ฒฝ์ ํ์ง ์์๋ ํฐ ๋ฌธ์ ๊ฐ ์์์ต๋๋ค.
์ฒ์์๋ Azure์๋ ๋น์ทํ๊ฒ NGINX Ingress Controller๋ฅผ ๊ตฌ์ฑํ๊ณ , Annotation ์ ๋๋ฅผ ์ถ๊ฐํ์ฌ Azure Load Balancer๋ฅผ ์ฌ์ฉํ๋ฉด ๋๋ค๊ณ ์๊ฐํ์ต๋๋ค.
ํ์ง๋ง, ์์๊ณผ ๋ฌ๋ฆฌ ๋ง์ ๋ฌธ์ ๊ฐ ์์์ต๋๋ค.
- Azure Load Balancer๋ ์ธ์ฆ์๋ฅผ Load balancer์ ํ ๋นํ ์ ์์ต๋๋ค.
AWS์๋ AWS Certificate Manager์์ ์์ฑํ ์ธ์ฆ์๋ฅผ ALB์ ํ ๋นํ ์ ์๊ณ , ์ธ์ฆ์์ ์๋ ๊ฐฑ์ ๋ ์ง์ํฉ๋๋ค.
ํ์ง๋ง ์ด๊ธฐ ๊ตฌ์ฑ์์๋ ์ธ์ฆ์ ๊ด๋ จ ์ค์ ์ ํ ์ ์์์ต๋๋ค. - Azure Load Balancer๋ ๋คํธ์ํฌ ๊ด๋ จ ๋ง์ ์ ์ฝ์ด ์์ต๋๋ค.
๊ธฐ๋ณธ์ ์ผ๋ก L4 Load balancer์ ํด๋นํ๊ณ , ๋ฐฉํ๋ฒฝ๊ณผ ์์ฒญ ํค๋ ๋ณ๊ฒฝ ๋ฑ์ ์ง์ํ์ง ์์์ต๋๋ค.
๋์ค์ ํธ์์ฑ๋ ๊ณ ๋ คํ๊ณ , ์ค์ ๋ก ์ด๋ก ์ธํด ๋ถํธํจ์ด ์๊ธธ ๊ฐ๋ฅ์ฑ๋ ์์๊ธฐ ๋๋ฌธ์ ์ ํฌ๋ Azure์์ ์ ๊ณตํ๋ L7 Load balancer์ธ Azure Application Gateway๋ฅผ ์ฌ์ฉํ๊ธฐ๋ก ๊ฒฐ์ ํ์์ต๋๋ค.
์ถ๊ฐ๋ก ํ์ฌ ์ธํ๋ผ๋ฅผ ๊ณ ๋ คํ์ ๋
AWS์์๋ ๊ฐ๊ธ์ L4 Load balancer์ธ NLB(Network Load Balancer)๋ณด๋ค L7 Load balancer์ธ ALB๋ฅผ ์ฌ์ฉํด์ผ๊ฒ ๋ค๋ ๊ตํ๋ ์ป์์ต๋๋ค.
์ด๋ ๊ฒ ์ค์ ์ ๋ง์ณค์ง๋ง ๋ฐฐํฌ ๊ณผ์ ์์ 1๊ฐ์ง ์ถ๊ฐ์ ์ธ ๋ฌธ์ ๊ฐ ๋ฐ์ํ์ต๋๋ค. ์์ธ์ ํฌ๊ฒ 2๊ฐ์ง์์ต๋๋ค.
- Azure์ AGIC(Application Gateway Ingress Controller)๋ ๋ณ๋ ์ค์ ์ด ์๋ค๋ฉด
X-Forwarded-Forํค๋๋ฅผIP:Portํ์์ผ๋ก ๋ณ๊ฒฝํฉ๋๋ค. - ๋ฐฑ์๋์์ ์ด ํค๋ ๊ฐ์ ์ฝ์ด ์์ ํ๋ ์ฝ๋๊ฐ ์์๊ณ , ํด๋น ํ์์ ๊ณ ๋ คํ์ง ์์ ๋ฌธ์ ๊ฐ ๋ฐ์ํ์ต๋๋ค.
ํฌํธ ์ ๋ณด์ ๊ฒฝ์ฐ ๊ณต์ ๋ฌธ์์์ ์ ๊ฑฐํ๋ ๋ฐฉ๋ฒ์ด ๋์ ์์ด ์กฐ์นํ ์ ์์๊ณ , ๊ทธ ์ธ์๋ ํ์๋ค๊ณผ ํจ๊ป ํ์ํ ํค๋์ ๋ฐฑ์๋์์ ์ฌ์ฉํ๋ ํค๋๋ฅผ ์กฐ์ฌํ์ฌ ๋ช ๊ฐ์ง ์ถ๊ฐ ์กฐ์ ์ ์ํํ์์ต๋๋ค.
๋ ธ๋ Auto Scaling
๋ง์ง๋ง์ผ๋ก ์ค์ํ๋ ์์ ์ค ํ๋๋ ๋ ธ๋์ Auto Scaling์ด ๊ฐ๋ฅํ๋๋ก ์ค์ ํ๋ ์์ ์ด์์ต๋๋ค. Auto Scaling์ ์ฌ์ฉ ์์์ ์ํฉ์ ๋ง๊ฒ ์กฐ์ ํ์ฌ, ์ ๋์ฑ์ ํ๋ณดํ ์ ์๊ณ ๋น์ฉ ํจ์จ๋ ๋์ผ ์ ์์ต๋๋ค. ํนํ๋, ์ผ๋ณธ ๋ฆฌ์ ์ ๊ฒฝ์ฐ ์ ๋ฌด ์๊ฐ์ ์ค์ฌ์ผ๋ก ํน์ ํผํฌ ํ์์ ํธ๋ํฝ์ด ๋ชฐ๋ฆฌ๋ ๊ฒฝํฅ์ด ์์๊ณ ๊ธฐ์กด์ ์ด๋ก ์ธํ ๋ฌธ์ ๋ ์์๊ธฐ ๋๋ฌธ์ ๊ผญ ํ์ํ ์์ ์ด์์ต๋๋ค.
Azure์์๋ ์ด๋ฅผ ์ํด Cluster autoscaler๋ฅผ ์ ๊ณตํ๊ณ ์์ต๋๋ค.
Terraform์์๋ AKS ๊ตฌ์ฑ์ ์ต์
์ ์ถ๊ฐํ๋ฉด ๋น๊ต์ ๊ฐํธํ๊ฒ ๊ตฌ์ฑํ ์ ์์์ต๋๋ค.
Karpenter๋ฅผ ์ฌ์ฉํ ์ ์๋ ์ ํ์ง๋ ์์์ง๋ง Azure ํ๊ฒฝ์์๋ ์กฐ๊ฑด์ด ์ ํ์ ์ด์ด์ ์ฌ์ฉํ์ง ์์์ต๋๋ค.
1๊ฐ์ง ์์๋ ์ ์, Cluster autoscaler์์ ๋
ธ๋ ์์ฑ ์ด๋ฒคํธ๊ฐ ๋ฐ์ํ๋ ์์ ์ ๋ฆฌ์์ค ๋ถ์กฑ์ผ๋ก ์ธํด Pod๊ฐ ์ค์ผ์ค๋ง์ด ๋์ง ์์ ๋๋ผ๋ ์ ์
๋๋ค. ๋
ธ๋๊ฐ ์ค์ด๋ค ๋๋ ๋ฆฌ์์ค ์ฌ์ฉ๋ฅ ์ ๊ณ ๋ คํฉ๋๋ค.
์ด ๋ฉ์ปค๋์ฆ์ด ๊ตฌ์ฑ ๊ณผ์ ์ ์ํฅ์ ๋ฏธ์น์ง๋ ์์ ์ค์ ๋ณ๊ฒฝ์ ์์์ต๋๋ค.
ํ ์คํธ๋ 1์ฐจ์ ์ผ๋ก Stress ์ด๋ฏธ์ง๋ฅผ ์ฌ๋ฌ ๊ฐ ๋ฐฐํฌํ๋ ์์ผ๋ก ๋ถํ๋ฅผ ์ฃผ์ด ์งํํ์๊ณ , ์ดํ ์ค์ ๋ฆฌ์์ค๋ฅผ ๋ฐฐํฌํด ๋ณด๋ฉด์ ๊ฒ์ฆ์ ๊ฑฐ์ณค๊ณ , ๋ ธ๋ ์ญ์ ์ด์ kubelet์ ์ํ ์กฐํ๊ฐ ์ค๋จ๋๊ณ NotReady ์ํ๋ก ์ ํ๋ ํ ์์ ํ๊ฒ ์ญ์ ๋๋ ๊ฒ๊น์ง ํ์ธํ์ต๋๋ค. ์๋๋ ์ค์ ์ฌ์ฉํ YAML ํ์ผ์ ๋๋ค.
apiVersion: apps/v1
kind: Deployment
metadata:
generation: 2
labels:
app: stress
name: stress
spec:
progressDeadlineSeconds: 600
# replicas: 10
replicas: 1
revisionHistoryLimit: 10
selector:
matchLabels:
app: stress
template:
metadata:
labels:
app: stress
spec:
containers:
- image: vish/stress
imagePullPolicy: Always
name: stress
resources:
limits:
cpu: 2000m
memory: 8Gi
requests:
cpu: 2000m
memory: 8Gi
args:
- -cpus
- "2"
- -mem-alloc-size
- "1Gi"
- -mem-alloc-sleep
- "1000ms"
- -mem-total
- "7Gi"
terminationMessagePath: /dev/termination-log
terminationMessagePolicy: File
dnsPolicy: ClusterFirst
restartPolicy: Always
schedulerName: default-scheduler
securityContext: {}
terminationGracePeriodSeconds: 30
๋ง์น๋ฉฐ
Azure์์ Kubernetes ํ๊ฒฝ์ ๊ตฌ์ถํ๋ฉฐ ๊ฒช์ ํฐ ๋ฌธ์ ๋ค์ ์ ๋ฆฌํด ๋ณด์์ต๋๋ค.
์ด์ธ์๋ ์ฌ๋ฌ ๋ฌธ์ ๋ค์ด ์์์ง๋ง, ๋ค ๋์ดํ๊ธฐ๋ ํ๋ค๊ณ ๊ณต๊ฐํ ์ ์๋ ๋ด์ฉ๋ค๋ ์์ด ๊ฐ์ธ์ ์ผ๋ก ์ ๋ฆฌํ ์์ ์
๋๋ค.
Azure๋ ํ์คํ ์ฐธ๊ณ ํ ์๋ฃ๊ฐ ์๋์ ์ผ๋ก ์ ์ต๋๋ค. ์ด๋ก ์ธํด Azure Private Link์ฒ๋ผ ์ ์ฉํด ๋ณด์ด์ง๋ง ์ด๊ธฐ ์์
๊ณํ๊ณผ ์์ ์ฑ ๋ฑ์ ๊ณ ๋ คํด ๋์
์ ๋ฏธ๋ฃฌ ๊ฒ๋ ์์์ต๋๋ค.
๊ฒฐ๊ตญ ๊ณ์ ๋ค๋ฃจ์ด์ผ ํ๋ ํ๊ฒฝ์ด๊ธฐ๋ ํ๊ณ , ์ด๋ ๊ฒ ๋ช ๊ฐ์ง ์๊ฐํด ๋ ๊ฒ๋ค์ ์ฒ์ฒํ ๊ฒ์ฆ์ ๊ฑฐ์ณ ๋์
ํ๋ ค ํฉ๋๋ค.
์ผ๋ณธ ์ง์ญ์ ์์์ผ๋ก ๋ค๋ฅธ ํ๊ฒฝ๋ Kubernetes๋ก ์ ํํ๊ณ , ์ ์ง์ ์ผ๋ก ํธ๋ํฝ์ ์ ํํ์ฌ ์ต์ข
์ ์ผ๋ก๋ ๊ธฐ์กด์ Docker Compose ๊ธฐ๋ฐ ํ๊ฒฝ์ ์์ ํ ์์ ๋ ๊ฒ์ด ๋ชฉํ์
๋๋ค.
์์ผ๋ก ๋ ๋ง์ ๋ฌธ์ ๋ค์ด ์์ ๊ฒ์ด๋ผ๊ณ ์๊ฐํ๋๋ฐ, ๊ผญ ํด ๋ณด๊ณ ์ถ์๋ ์์
์ด๊ธฐ ๋๋ฌธ์ ๊ฐ๋ฅํ ๋ฐ๊น์ง ๋
ธ๋ ฅํด ๋ณด๊ณ ์ถ๋ค์.
์ฐธ๊ณ ์๋ฃ
- What is Azure Load Balancer? ๋ฑ MS ๊ณต์ ๋ฌธ์
- AWS ALB์ NLB ์ฐจ์ด์
- Differences between ALB, NLB, and CLB
- Use the cluster autoscaler in Azure Kubernetes Service (AKS)
- AGIC Annotation ๊ด๋ จ ๋ฌธ์