[AEWS] # 2์ฃผ์ฐจ aws ๋กœ๋“œ๋ฐธ๋Ÿฐ์„œ ์ปจํŠธ๋กค๋Ÿฌ์™€ ์ธ๊ทธ๋ ˆ์Šค ํŠธ๋ž˜ํ”ฝ ๋ถ„์„ (4)

25๋…„๋„ AWS EKS Hands-on Study ์Šคํ„ฐ๋”” ์ •๋ฆฌ ๋‚ด์šฉ์ž…๋‹ˆ๋‹ค.

aws ๋กœ๋“œ๋ฐธ๋Ÿฐ์„œ ์ปจํŠธ๋กค๋Ÿฌ ๋ฐฐํฌ ์‹ค์Šต

AWS ๋กœ๋“œ๋ฐธ๋Ÿฐ์„œ ์ปจํŠธ๋กค๋Ÿฌ๋Š” ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค์—์„œ AWS์˜ ๋กœ๋“œ ๋ฐธ๋Ÿฐ์„œ๋ฅผ ์ž๋™์œผ๋กœ ํ”„๋กœ๋น„์ €๋‹ํ•˜๊ณ  ๊ด€๋ฆฌํ•˜๋Š” ์ปจํŠธ๋กค๋Ÿฌ์ด๋‹ค.

์ฟ ๋ฒ„๋„คํ‹ฐ์Šค ํด๋Ÿฌ์Šคํ„ฐ์—์„œ ํŒŒ๋“œ๋กœ ํŠธ๋ž˜ํ”ฝ์„ ์ „๋‹ฌํ•˜๊ธฐ ์œ„ํ•ด aws ๋กœ๋“œ๋ฐธ๋Ÿฐ์„œ๋ฅผ ์ž๋™์œผ๋กœ ์ƒ์„ฑํ•˜๊ณ  ์„ค์ •ํ•˜๋Š” ์—ญํ• ์„ ์ˆ˜ํ–‰ํ•œ๋‹ค.

๋กœ๋“œ๋ฐธ๋Ÿฐ์„œ ์ปจํŠธ๋กค๋Ÿฌ ๋ฐฐํฌ

kubectl get crd
NAME                                         CREATED AT
cninodes.vpcresources.k8s.aws                2025-02-15T17:37:19Z
eniconfigs.crd.k8s.amazonaws.com             2025-02-15T17:41:54Z
policyendpoints.networking.k8s.aws           2025-02-15T17:37:19Z
securitygrouppolicies.vpcresources.k8s.aws   2025-02-15T17:37:19Z

helm repo add eks https://aws.github.io/eks-charts
helm repo update
helm install aws-load-balancer-controller eks/aws-load-balancer-controller -n kube-system --set clusterName=myeks

kubectl get crd
NAME                                         CREATED AT
cninodes.vpcresources.k8s.aws                2025-02-15T17:37:19Z
eniconfigs.crd.k8s.amazonaws.com             2025-02-15T17:41:54Z
ingressclassparams.elbv2.k8s.aws             2025-02-16T05:56:45Z <- ์ถ”๊ฐ€
policyendpoints.networking.k8s.aws           2025-02-15T17:37:19Z
securitygrouppolicies.vpcresources.k8s.aws   2025-02-15T17:37:19Z 
targetgroupbindings.elbv2.k8s.aws            2025-02-16T05:56:45Z <- ์ถ”๊ฐ€

 

aws ๋กœ๋“œ๋ฐธ๋Ÿฐ์„œ ์ปจํŠธ๋กค๋Ÿฌ๋ฅผ ๋ฐฐํฌํ•˜๋ฉด ์•„๋ž˜์— ์ธ๊ทธ๋ ˆ์Šค์™€ ํƒ€๊ฒŸ ๊ทธ๋ฃน ๋ฐ”์ธ๋”ฉ์ด ์ถ”๊ฐ€๋˜๋Š” ๊ฒƒ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค.

 

ingressclassparams.elbv2.k8s.aws๋Š” aws ๋กœ๋“œ๋ฐธ๋Ÿฐ์„œ ์ปจํŠธ๋กค๋Ÿฌ๊ฐ€ ์ธ๊ทธ๋ ˆ์Šค ๋ฆฌ์†Œ์Šค๋ฅผ ์ฒ˜๋ฆฌํ•˜๋Š” ๋ฐฉ์‹์„ ์„ค์ •ํ•˜์—ฌ ํŠธ๋ž˜ํ”ฝ์„ ์ฒ˜๋ฆฌํ•˜๋Š” ๋ฐฉ์‹์„ ๊ฒฐ์ •ํ•œ๋‹ค.

loadBalancerType์„ application ๋˜๋Š” network๋กœ ์„ค์ •ํ•˜์—ฌ ALB๋‚˜ NLB๋ฅผ ์„ ํƒํ•  ์ˆ˜ ์žˆ๊ณ , scheme์„ internal๋กœ ์ง€์ •ํ•˜๋ฉด ๋‚ด๋ถ€ ๋„คํŠธ์›Œํฌ์—์„œ๋งŒ ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋„๋ก ์„ค์ •ํ•  ์ˆ˜๋„ ์žˆ๋‹ค. ๋˜ํ•œ ip ์ฃผ์†Œ ์œ ํ˜•์„ ์ง€์ •ํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ ๊ทธ๋ฃน์„ ํ™œ์šฉํ•˜์—ฌ ์—ฌ๋Ÿฌ ๊ฐœ์˜ ์ธ๊ทธ๋ ˆ์Šค ๋ฆฌ์†Œ์Šค๋ฅผ ๋™์ผํ•œ ๋กœ๋“œ๋ฐธ๋Ÿฐ์„œ์—์„œ ์„œ๋น„์Šคํ•  ์ˆ˜๋„ ์žˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  AWS์˜ firewall์ธ WAF๋ฅผ ์ ์šฉํ•  ์ˆ˜ ์žˆ๋„๋ก wafACL ์˜ต์…˜์„ ์„ค์ •ํ•  ์ˆ˜ ์žˆ๋‹ค.

 

targetgroupbindings.elbv2.k8s.aws๋Š” aws ํƒ€๊ฒŸ ๊ทธ๋ฃน๊ณผ ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค ์„œ๋น„์Šค ๊ฐ„์˜ ์—ฐ๊ฒฐ์„ ์„ค์ •ํ•˜๋Š” ๋ฆฌ์†Œ์Šค์ด๋‹ค. ALB ๋˜๋Š” NLB๋ฅผ ์‚ฌ์šฉํ•  ๋•Œ, ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค ์„œ๋น„์Šค๊ฐ€ ์–ด๋–ค ํƒ€๊ฒŸ ๊ทธ๋ฃน์— ๋ฐ”์ธ๋”ฉ๋ ์ง€๋ฅผ ์ •์˜ํ•˜๋Š” ์—ญํ• ์„ ํ•œ๋‹ค.

์ผ๋ฐ˜์ ์œผ๋กœ aws ๋กœ๋“œ๋ฐธ๋Ÿฐ์„œ ์ปจํŠธ๋กค๋Ÿฌ๊ฐ€ ์ž๋™์œผ๋กœ Target Group์„ ์ƒ์„ฑํ•˜๊ณ  ๊ด€๋ฆฌํ•˜์ง€๋งŒ, ํŠน์ • Target Group์„ ์ˆ˜๋™์œผ๋กœ ๋ฐ”์ธ๋”ฉํ•ด์•ผ ํ•  ๊ฒฝ์šฐ ์ง์ ‘ ์„ค์ •ํ•  ์ˆ˜ ์žˆ๋‹ค. ์ด ๋ฆฌ์†Œ์Šค์—์„œ๋Š” targetGroupARN์„ ์ง€์ •ํ•˜์—ฌ ์—ฐ๊ฒฐํ•  AWS Target Group์„ ์ •์˜ํ•˜๊ณ  serviceRef๋ฅผ ํ†ตํ•ด ์–ด๋–ค ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค ์„œ๋น„์Šค์™€ ์—ฐ๊ฒฐํ• ์ง€๋ฅผ ์„ค์ •ํ•  ์ˆ˜ ์žˆ๋‹ค.

๋˜ํ•œ ๋„คํŠธ์›Œํ‚น ์˜ต์…˜์„ ํ™œ์šฉํ•ด ์ธ๊ทธ๋ ˆ์Šค ํŠธ๋ž˜ํ”ฝ์˜ ๋„คํŠธ์›Œํฌ ๊ทœ์น™์„ ์„ค์ •ํ•˜๊ณ  ํ—ฌ์Šค์ฒดํฌ๋ฅผ ํ†ตํ•ด ํƒ€๊ฒŸ ๊ทธ๋ฃน๊ณผ ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค์˜ ์„œ๋น„์Šค ์ƒํƒœ๋ฅผ ์ง€์†์ ์œผ๋กœ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค.

NLB ๊ธฐ๋ฐ˜ ๋กœ๋“œ๋ฐธ๋Ÿฐ์‹ฑ ์™ธ๋ถ€ ํŠธ๋ž˜ํ”ฝ ๋ชจ๋‹ˆํ„ฐ๋งํ•˜๊ธฐ

aws elbv2 describe-load-balancers --query 'LoadBalancers[*].State.Code' --output text
provisioning

kubectl get deploy,pod
NAME                          READY   UP-TO-DATE   AVAILABLE   AGE
deployment.apps/deploy-echo   2/2     2            2           69s

NAME                              READY   STATUS    RESTARTS   AGE
pod/deploy-echo-bf9bdb8bc-j8nv2   1/1     Running   0          69s
pod/deploy-echo-bf9bdb8bc-k8rfm   1/1     Running   0          69s

kubectl get svc,ep,ingressclassparams,targetgroupbindings
NAME                      TYPE           CLUSTER-IP       EXTERNAL-IP                                                                         PORT(S)        AGE
service/kubernetes        ClusterIP      10.100.0.1       <none>                                                                              443/TCP        12h
service/svc-nlb-ip-type   LoadBalancer   10.100.211.196   k8s-default-svcnlbip-23bdb42a5b-60cc42917afec8f6.elb.ap-northeast-2.amazonaws.com   80:30732/TCP   74s

NAME                        ENDPOINTS                             AGE
endpoints/kubernetes        192.168.1.30:443,192.168.2.73:443     12h
endpoints/svc-nlb-ip-type   192.168.2.14:8080,192.168.3.84:8080   74s

NAME                                   GROUP-NAME   SCHEME   IP-ADDRESS-TYPE   AGE
ingressclassparams.elbv2.k8s.aws/alb                                           7m39s

NAME                                                               SERVICE-NAME      SERVICE-PORT   TARGET-TYPE   AGE
targetgroupbinding.elbv2.k8s.aws/k8s-default-svcnlbip-126fcb8e49   svc-nlb-ip-type   80             ip            69s

 

 

๋””ํ”Œ๋กœ์ด๋จผํŠธ๋ฅผ ์ƒ์„ฑํ•˜์—ฌ 2๊ฐœ์˜ ์›น ์„œ๋ฒ„ ํŒŒ๋“œ๋ฅผ ์‹คํ–‰ํ•œ๋‹ค. ์„œ๋น„์Šค๋ฅผ ์ƒ์„ฑํ•˜๊ณ  ์ด๋ฅผ aws ๋กœ๋“œ๋ฐธ๋Ÿฐ์„œ ์ปจํŠธ๋กค๋Ÿฌ๋ฅผ ์‚ฌ์šฉํ•ด์„œ NLB์— ์—ฐ๊ฒฐํ•œ๋‹ค.

์œ„ ๋‚ด์šฉ์€ ๋ฐฐํฌ๋œ ํŒŒ๋“œ, ์„œ๋น„์Šค, ํƒ€๊ฒŸ ๊ทธ๋ฃน ๋ฐ”์ธ๋”ฉ์— ๋Œ€ํ•œ ์ •๋ณด์ด๋‹ค.

 

 

์›น ๋ธŒ๋ผ์šฐ์ €์—์„œ ์ƒˆ๋กœ๊ณ ์นจํ•  ๋•Œ๋งˆ๋‹ค NLB๋ฅผ ํ†ตํ•ด ์š”์ฒญ์ด ๋“ค์–ด์˜ค๋ฉด์„œ ํŒŒ๋“œ๊ฐ€ ์š”์ฒญ์„ ์ฒ˜๋ฆฌํ•˜๋Š” ๋กœ๊ทธ๊ฐ€ ์ถœ๋ ฅ๋˜๋Š” ๊ฒƒ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค.

 

NLB=$(kubectl get svc svc-nlb-ip-type -o jsonpath='{.status.loadBalancer.ingress[0].hostname}')
curl -s $NLB
for i in {1..100}; do curl -s $NLB | grep Hostname ; done | sort | uniq -c | sort -nr

56 Hostname: deploy-echo-bf9bdb8bc-k8rfm
44 Hostname: deploy-echo-bf9bdb8bc-j8nv2

 

 

NLB๊ฐ€ ์š”์ฒญ์„ ์–ด๋–ค ํŒŒ๋“œ์— ์–ผ๋งŒํผ ๋ณด๋ƒˆ๋Š”์ง€๋ฅผ ํ™•์ธํ•œ๋‹ค.

ํ˜„์žฌ 100๊ฐœ์˜ HTTP ์š”์ฒญ์„ NLB๋ฅผ ํ†ตํ•ด ๋ณด๋ƒˆ๊ณ  ํŠธ๋ž˜ํ”ฝ์ด 2๊ฐœ์˜ ํŒŒ๋“œ๋กœ ๋ถ„์‚ฐ๋œ ๊ฒƒ์„ ํ™•์ธํ•˜๋Š” ๊ณผ์ •์„ ์•Œ ์ˆ˜ ์žˆ๋‹ค.

๋งŒ์•ฝ ํŒŒ๋“œ์˜ ๋ ˆํ”Œ๋ฆฌ์นด๋ฅผ ๋Š˜๋ฆฌ๊ฒŒ ๋˜๋ฉด ๋ถ€ํ•˜ ๋ถ„์‚ฐ์„ ์ฒ˜๋ฆฌ ๋ฐ›๋Š” ํŒŒ๋“œ๊ฐ€ ๋Š˜์–ด๋‚˜๊ฒŒ ๋˜์–ด ํŠธ๋ž˜ํ”ฝ์„ ์ฒ˜๋ฆฌํ•˜๊ฒŒ ๋œ๋‹ค.

์ธ๊ทธ๋ ˆ์Šค๋ฅผ ํ™œ์šฉํ•œ ๊ฒŒ์ž„ ํŒŒ๋“œ ๋ฐฐํฌ

 

ingress-2048๋Š” ALB๋ฅผ ํ†ตํ•ด ์™ธ๋ถ€ ํŠธ๋ž˜ํ”ฝ์„ ๋ฐ›์•„ Kubernetes ๋‚ด๋ถ€์˜ ์„œ๋น„์Šค๋กœ ์ „๋‹ฌํ•˜๋Š” ๋‚ด์šฉ์„ ์‹ค์Šตํ•ด๋ณธ๋‹ค. ALB๋Š” ์™ธ๋ถ€์—์„œ ์ ‘๊ทผ ๊ฐ€๋Šฅํ•˜๊ณ , ALB๊ฐ€ ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค ๋…ธ๋“œ๊ฐ€ ์•„๋‹Œ ํŒŒ๋“œ IP๋ฅผ ์ง์ ‘ Target์œผ๋กœ ์‚ฌ์šฉํ•œ๋‹ค.

 

kubectl get ingress,svc,ep,pod -n game-2048
NAME                                     CLASS   HOSTS   ADDRESS                                                                       PORTS   AGE
ingress.networking.k8s.io/ingress-2048   alb     *       k8s-game2048-ingress2-70d50ce3fd-302175647.ap-northeast-2.elb.amazonaws.com   80      32s

NAME                   TYPE       CLUSTER-IP       EXTERNAL-IP   PORT(S)        AGE
service/service-2048   NodePort   10.100.179.206   <none>        80:32004/TCP   32s

NAME                     ENDPOINTS                           AGE
endpoints/service-2048   192.168.1.205:80,192.168.3.250:80   32s

NAME                                   READY   STATUS    RESTARTS   AGE
pod/deployment-2048-7df5f9886b-f9kkk   1/1     Running   0          32s
pod/deployment-2048-7df5f9886b-zczdc   1/1     Running   0          32s

kubectl describe ingress -n game-2048 ingress-2048
Name:             ingress-2048
Labels:           <none>
Namespace:        game-2048
Address:          k8s-game2048-ingress2-70d50ce3fd-302175647.ap-northeast-2.elb.amazonaws.com
Ingress Class:    alb
Default backend:  <default>
Rules:
  Host        Path  Backends
  ----        ----  --------
  *
              /   service-2048:80 (192.168.3.250:80,192.168.1.205:80)
Annotations:  alb.ingress.kubernetes.io/scheme: internet-facing
              alb.ingress.kubernetes.io/target-type: ip
Events:
  Type    Reason                  Age    From     Message
  ----    ------                  ----   ----     -------
  Normal  SuccessfullyReconciled  3m35s  ingress  Successfully reconciled
kubectl get pod,ingress,svc,ep,endpointslices -n game-2048                                                  Sun Feb 16 15:38:50 2025

NAME                                   READY   STATUS    RESTARTS   AGE
pod/deployment-2048-7df5f9886b-f9kkk   1/1     Running   0          11m
pod/deployment-2048-7df5f9886b-zczdc   1/1     Running   0          11m

NAME                                     CLASS   HOSTS   ADDRESS                                                                       PORTS   A
GE
ingress.networking.k8s.io/ingress-2048   alb     *	 k8s-game2048-ingress2-70d50ce3fd-302175647.ap-northeast-2.elb.amazonaws.com   80      1
1m

NAME                   TYPE	  CLUSTER-IP	   EXTERNAL-IP   PORT(S)        AGE
service/service-2048   NodePort   10.100.179.206   <none>        80:32004/TCP   11m

NAME                     ENDPOINTS                           AGE
endpoints/service-2048   192.168.1.205:80,192.168.3.250:80   11m

NAME                                                ADDRESSTYPE   PORTS   ENDPOINTS                     AGE
endpointslice.discovery.k8s.io/service-2048-4lzmp   IPv4          80	  192.168.3.250,192.168.1.205   11m

 

 

๋ฆฌ์†Œ์Šค๋งต์„ ๋ณด๋ฉด ALB๊ฐ€ HTTP ์š”์ฒญ์„ ๋ฐ›์•„์„œ ์ง€์ •๋œ ํƒ€๊ฒŸ ๊ทธ๋ฃน์œผ๋กœ ์ „๋‹ฌํ•œ๋‹ค. ์ƒ์„ฑ๋œ ํƒ€๊ฒŸ ๊ทธ๋ฃน์—๋Š” 2๊ฐœ์˜ ip๊ฐ€ ๋“ฑ๋ก๋ผ์žˆ๋Š”๋ฐ ์ด๋Š” ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค์—์„œ ์‹คํ–‰ ์ค‘์ธ 2048 ๊ฒŒ์ž„์˜ ํŒŒ๋“œ ip์ด๋‹ค.

ALB๊ฐ€ ํŠธ๋ž˜ํ”ฝ์„ ๋ฐ›์•„ ํƒ€๊ฒŸ ๊ทธ๋ฃน์„ ํ†ตํ•ด Game 2048 Pod๋กœ ์ „๋‹ฌํ•˜๋Š” ๊ตฌ์กฐ์ž„์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค.

 

ALB -> ํŒŒ๋“œ ํŠธ๋ž˜ํ”ฝ ํ™•์ธ

ALB์—์„œ ๋“ค์–ด์˜ค๋Š” ํŠธ๋ž˜ํ”ฝ์ด ec2์— ๋„์ฐฉํ–ˆ๋Š”์ง€ ํ™•์ธ

sudo iptables -v --numeric --table nat --list PREROUTING
Chain PREROUTING (policy ACCEPT 515 packets, 31632 bytes)
 pkts bytes target     prot opt in     out     source               destination
 1281 81886 KUBE-SERVICES  all  --  *      *       0.0.0.0/0            0.0.0.0/0  /* kubernetes service portals */
   22  1748 AWS-CONNMARK-CHAIN-0  all  --  eni+   *       0.0.0.0/0            0.0.0.0/0  /* AWS, outbound connections */
  514 31572 CONNMARK   all  --  *      *       0.0.0.0/0            0.0.0.0/0  /* AWS, CONNMARK */ CONNMARK restore mask 0x80

 

 

ALB์—์„œ ๋“ค์–ด์˜จ ํŠธ๋ž˜ํ”ฝ์ด KUBE-SERVICES ์ฒด์ธ์œผ๋กœ ์ „๋‹ฌ๋˜๋Š” ๊ฒƒ์„ ์•Œ ์ˆ˜ ์žˆ๋‹ค.

AWS-CONNMARK-CHAIN-0: AWS์—์„œ ๊ด€๋ฆฌํ•˜๋Š” ์—ฐ๊ฒฐ ์ถ”์ , ์™ธ๋ถ€ ํŠธ๋ž˜ํ”ฝ์„ ๋ชจ๋‹ˆํ„ฐ๋งํ•˜๋Š” ์—ญํ• ์„ ์ˆ˜ํ–‰ํ•œ๋‹ค.

KUBE-SERVICES ์ฒด์ธ์—์„œ ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค ์„œ๋น„์Šค๋กœ ์ „๋‹ฌ

sudo iptables -t nat -L KUBE-SERVICES -n -v
Chain KUBE-SERVICES (2 references)
 pkts bytes target     prot opt in     out     source               destination
    0     0 KUBE-SVC-TCOU7JCQXEZGVUNU  udp  --  *      *       0.0.0.0/0            10.100.0.10  /* kube-system/kube-dns:dns cluster IP */ udp dpt:53
    0     0 KUBE-SVC-V7WHPSTR7G6YHTBY  tcp  --  *      *       0.0.0.0/0            10.100.179.206  /* game-2048/service-2048 cluster IP */ tcp dpt:80

 

 

ALB์—์„œ ๋“ค์–ด์˜จ HTTP ์š”์ฒญ(ํฌํŠธ 80)์ด game-2048/service-2048์œผ๋กœ ์ „๋‹ฌ๋˜๋Š”๋ฐ, 

ALB → Ingress → Kubernetes Service (10.100.179.206)๋กœ ํŠธ๋ž˜ํ”ฝ์ด ์ด๋™ํ•˜๊ฒŒ๋œ๋‹ค.

KUBE-SVC-* ์ฒด์ธ์—์„œ ํŠน์ • Pod์œผ๋กœ ํŠธ๋ž˜ํ”ฝ ๋ถ„๋ฐฐ

sudo iptables -v --numeric --table nat --list KUBE-SVC-V7WHPSTR7G6YHTBY
Chain KUBE-SVC-V7WHPSTR7G6YHTBY (2 references)
 pkts bytes target     prot opt in     out     source               destination
    0     0 KUBE-SEP-OBK75HIRYFJMGQNA  all  --  *      *       0.0.0.0/0            0.0.0.0/0            /* game-2048/service-2048 -> 192.168.1.205:80 */ statistic mode random probability 0.50000000000
    0     0 KUBE-SEP-CG6NLPOJTSMBSPCP  all  --  *      *       0.0.0.0/0            0.0.0.0/0            /* game-2048/service-2048 -> 192.168.3.250:80 */

 

์ด ์ฒด์ธ์€ Kubernetes Service(game-2048/service-2048)๊ฐ€ ํŠธ๋ž˜ํ”ฝ์„ ํŠน์ • Pod์œผ๋กœ ๋ผ์šฐํŒ…ํ•˜๋Š” ์—ญํ• ์„ ํ•˜๋Š”๋ฐ, 2๊ฐœ์˜ KUBE-SEP-* ์ฒด์ธ์„ ์‚ฌ์šฉํ•˜์—ฌ Pod(192.168.1.205:80, 192.168.3.250:80)์œผ๋กœ ํŠธ๋ž˜ํ”ฝ์„ ์ „๋‹ฌํ•œ๋‹ค.

statistic mode random probability 0.50000000000 → ๋‘ ๊ฐœ์˜ Pod์— ๋Œ€ํ•ด 50% ํ™•๋ฅ ๋กœ ํŠธ๋ž˜ํ”ฝ์„ ๋ถ„๋ฐฐํ•˜๋Š” ๋ผ์šด๋“œ ๋กœ๋นˆ ๋ฐฉ์‹์œผ๋กœ ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค ์„œ๋น„์Šค๊ฐ€ ๋‘ ๊ฐœ์˜ Pod์œผ๋กœ ๋กœ๋“œ ๋ฐธ๋Ÿฐ์‹ฑ์„ ์ˆ˜ํ–‰ํ•˜๊ณ  ์žˆ๋Š” ๊ฒƒ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค.

KUBE-SEP-* ์ฒด์ธ์—์„œ ํŠน์ • ํŒŒ๋“œ๋กœ DNAT ๋ณ€ํ™˜

[ec2-user@ip-192-168-1-112 ~]$ sudo iptables -v --numeric --table nat --list KUBE-SEP-OBK75HIRYFJMGQNA
Chain KUBE-SEP-OBK75HIRYFJMGQNA (1 references)
 pkts bytes target     prot opt in     out     source               destination
    0     0 KUBE-MARK-MASQ  all  --  *      *       192.168.1.205        0.0.0.0/0            /* game-2048/service-2048 */
    0     0 DNAT       tcp  --  *      *       0.0.0.0/0            0.0.0.0/0            /* game-2048/service-2048 */ tcp to:192.168.1.205:80
[ec2-user@ip-192-168-1-112 ~]$ sudo iptables -v --numeric --table nat --list KUBE-SEP-CG6NLPOJTSMBSPCP
Chain KUBE-SEP-CG6NLPOJTSMBSPCP (1 references)
 pkts bytes target     prot opt in     out     source               destination
    0     0 KUBE-MARK-MASQ  all  --  *      *       192.168.3.250        0.0.0.0/0            /* game-2048/service-2048 */
    0     0 DNAT       tcp  --  *      *       0.0.0.0/0            0.0.0.0/0            /* game-2048/service-2048 */ tcp to:192.168.3.250:80

 

๊ฐ ํŒŒ๋“œ๋งˆ๋‹ค KUBE-SEP-* ์ฒด์ธ์ด ์ƒ์„ฑ๋˜๊ณ , ์„œ๋น„์Šค๋กœ ๋“ค์–ด์˜จ ํŠธ๋ž˜ํ”ฝ์ด ํŒŒ๋“œ(192.168.1.205:80, 192.168.1.250:80)์œผ๋กœ DNAT ๋ณ€ํ™˜๋˜๋Š” ๊ฒƒ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค.

ํŒŒ๋“œ์—์„œ ์‘๋‹ต ์‹œ POSTROUTING์—์„œ SNAT ์ ์šฉ

sudo iptables -t nat -L POSTROUTING -n -v
Chain POSTROUTING (policy ACCEPT 7250 packets, 446K bytes)
 pkts bytes target     prot opt in     out     source               destination
12029  742K KUBE-POSTROUTING  all  --  *      *       0.0.0.0/0            0.0.0.0/0            /* kubernetes postrouting rules */
11239  694K AWS-SNAT-CHAIN-0  all  --  *      *       0.0.0.0/0            0.0.0.0/0            /* AWS SNAT CHAIN */

 

์ด ์ฒด์ธ์€ ํŒจํ‚ท์ด ๋…ธ๋“œ๋ฅผ ๋– ๋‚˜๊ธฐ ์ „์— ๋งˆ์ง€๋ง‰์œผ๋กœ ๊ฑฐ์น˜๋Š” ์ฒด์ธ์œผ๋กœ, ํŒŒ๋“œ๊ฐ€ ์‘๋‹ต์„ ๋ณด๋‚ผ ๋•Œ NAT(SNAT) ์ฒ˜๋ฆฌ๊ฐ€ ํ•„์š”ํ•  ๊ฒฝ์šฐ ๊ฑฐ์น˜๊ฒŒ ๋˜๋Š”๋ฐ
AWS-SNAT-CHAIN-0์ด ์‚ฌ์šฉํ•˜์—ฌ ํŒจํ‚ท์˜ ์ถœ๋ฐœ์ง€ IP๋ฅผ ๋ณ€๊ฒฝํ•œ๋‹ค.

ํด๋Ÿฌ์Šคํ„ฐ ๋‚ด๋ถ€ ํŠธ๋ž˜ํ”ฝ์ด๋ฉด NAT๋ฅผ ์ ์šฉํ•˜์ง€ ์•Š๊ณ , ์™ธ๋ถ€ ํŠธ๋ž˜ํ”ฝ์ด๋ฉด SNAT ๋ณ€ํ™˜ (AWS-SNAT-CHAIN-0)๋˜์–ด ๋‚˜๊ฐ„๋‹ค.

 

ALB์—์„œ ํŒŒ๋“œ๋กœ ๋“ค์–ด์˜ค๋Š” ํŠธ๋ž˜ํ”ฝ ํ๋ฆ„์„ ์ •๋ฆฌํ•˜๋ฉด ์•„๋ž˜์™€ ๊ฐ™๋‹ค.

  1. ALB์—์„œ HTTP ์š”์ฒญ ๋ฐœ์ƒ → ec2๋กœ ์ „๋‹ฌ
  2. PREROUTING ์ฒด์ธ์ด ALB์—์„œ ์˜จ ํŠธ๋ž˜ํ”ฝ์„ ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค ์„œ๋น„์Šค๋กœ ๋ผ์šฐํŒ… 
  3. KUBE-SERVICES ์ฒด์ธ์—์„œ ์š”์ฒญ์„ ์ ์ ˆํ•œ ์ฟ ๋ฒ  ์„œ๋น„์Šค๋กœ ๋ณด๋ƒ„ 
  4. KUBE-SVC-* ์ฒด์ธ์—์„œ ํŠน์ • ํŒŒ๋“œ๋กœ ํŠธ๋ž˜ํ”ฝ์„ ๋ถ„๋ฐฐ 
  5. KUBE-SEP-* ์ฒด์ธ์—์„œ ํŒŒ๋“œ๋กœ ์ตœ์ข… DNAT(๋ชฉ์ ์ง€ ๋ณ€๊ฒฝ) ์ˆ˜ํ–‰ 
  6. ํŒŒ๋“œ์—์„œ ์‘๋‹ต์„ ๋ณด๋‚ผ ๋•Œ POSTROUTING์—์„œ SNAT ์ฒ˜๋ฆฌ ํ›„ ALB๋กœ ์‘๋‹ต ๋ฐ˜ํ™˜