๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ

DevOps/[AWS]

[AWS EKS] AWS EKS ๊ตฌ์ถ•ํ•˜๊ธฐ -3

๋ฐ˜์‘ํ˜•

 

INTRO


 

2ํŽธ์—์„œ ๋…ธ๋“œ ๊ทธ๋ฃน์„ ์ƒ์„ฑํ•˜๊ณ  ๋…ธ๋“œ 2๊ฐœ๊ฐ€ ํ™œ์„ฑํ™” ๋œ ๊ฒƒ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ์—ˆ๋‹ค.

์ด๋ฒˆ ํฌ์ŠคํŒ…์—์„œ๋Š” ํ•ด๋‹น ๋…ธ๋“œ์— dockerize๋œ ์ด๋ฏธ์ง€๋ฅผ pod ๋กœ ์˜ฌ๋ ค๋ณผ๊ฒƒ์ด๊ณ ,

์ด๋ฅผ ์œ„ํ•œ yaml ํŒŒ์ผ๋“ค ์„ค์ • ๋ฐฉ๋ฒ•์— ๋Œ€ํ•ด ์•Œ์•„๋ณธ๋‹ค.

 

 

 


 

 

 

1.  namespace ์ƒ์„ฑ

- 2ํŽธ๊นŒ์ง€ ์ง„ํ–‰ํ–ˆ๋‹ค๋ฉด ํ˜„์žฌ๊นŒ์ง€ ์ƒ์„ฑํ•œ ๊ฒƒ๋“ค์€ ์•„๋ž˜์™€ ๊ฐ™๋‹ค.

 1. 2๊ฐœ์˜ ์—ญํ•  ์ƒ์„ฑ(clusterRole, nodeRole)

 2. vpc์ƒ์„ฑ(2๊ฐœ์˜ private subnet, 2๊ฐœ์˜ public subnet)

 3. ํด๋Ÿฌ์Šคํ„ฐ ์ƒ์„ฑ

 4. ํด๋Ÿฌ์Šคํ„ฐ ์ œ์–ด๋ฅผ ์œ„ํ•œ EC2 ์ƒ์„ฑ(aws cli, kubectl, kubeconfig๋กœ ์—ฐ๊ฒฐ)

 5. 1๊ฐœ์˜ node group๊ณผ 2๊ฐœ์˜ node ์ƒ์„ฑ

 

- ์—ฌ๊ธฐ๊นŒ์ง€ ์ง„ํ–‰๋˜๊ณ , ์•„๋ž˜ ๋ช…๋ น์–ด๋ฅผ ์ž…๋ ฅํ•˜๋ฉด 4๊ฐœ์˜ namespace๋ฅผ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค.

$ kubectl get ns

 

-namespace๋ž€, ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค์—์„œ ์‚ฌ์šฉ์ž, ๋„คํŠธ์›Œํฌ, ์ €์žฅ๊ณต๊ฐ„๋“ฑ(์ด 6๊ฐ€์ง€ ์ •๋„ ๋œ๋‹ค๊ณ  ํ•œ๋‹ค.)์„ ๋…ผ๋ฆฌ์ ์œผ๋กœ ๋‚˜๋ˆ„๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉ๋˜๋Š” ๊ฐœ๋…์œผ๋กœ,

- AWS EKS์—์„œ๋Š” ์ตœ์ดˆ ๋…ธ๋“œ๋ฅผ ์ƒ์„ฑํ•œ ์‹œ์ ์— 4๊ฐœ์˜ namespace๊ฐ€ ์ƒ์„ฑ๋œ๋‹ค.

 

- default ๋ฅผ ์ œ์™ธํ•œ namespace๋“ค์€ ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค์˜ ์ „๋ฐ˜์ ์ธ ์„ค์ •์— ๊ด€๋ จํ•œ ๊ฒƒ๋“ค์ด๋ฏ€๋กœ, ๊ฐ€๊ธ‰์  ๊ฑด๋“œ๋ฆฌ์ง€ ์•Š๋Š” ๊ฒƒ์ด ์ข‹์œผ๋ฉฐ,

- ์ƒˆ๋กœ namespace ๋ฅผ ์ƒ์„ฑํ• ๋•Œ์—๋„ ๊ธฐ๋ณธ namespace๋“ค์˜ naming rule(kube-)๋ฅผ ๊ฐ€๊ธ‰์  ์ง€์–‘ํ•ด์•ผํ•œ๋‹ค.

- ์•„๋ž˜ ๋ช…๋ น์–ด๋ฅผ ํ†ตํ•ด ์‹ค์Šต์— ํ•„์š”ํ•œ namespace๋ฅผ ์ƒ์„ฑํ•œ๋‹ค.

$ kubectl create ns demo-ns

 

2. ์‹ค์Šต ํ™˜๊ฒฝ์„ ์œ„ํ•œ ๊ฐ„๋žตํ•œ ์„ค๋ช…

- ํ•˜๋‚˜์˜ ๋„์ปค ์ด๋ฏธ์ง€๋ฅผ ์•„๋ž˜์™€ ๊ฐ™์€ ํ˜•์ƒ์œผ๋กœ ๋ฐฐํฌํ•ด ๋ณผ ๊ฒƒ์ด๋‹ค.

์ถœ์ฒ˜ :https://kubernetes.io/docs/tutorials/kubernetes-basics/expose/expose-intro/

 

์‹ค์ œ ์‹ค์Šตํ•ด ๋ณผ ingress๋ฅผ ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค ํ™ˆํŽ˜์ด์ง€์—์„œ ๊ฐ€์ ธ์˜จ ์ด๋ฏธ์ง€ ์˜†์— ์ถ”๊ฐ€ํ–ˆ๋‹ค.

 

 

 

- ๋Œ€๋žต์ ์œผ๋กœ ์œ„์™€ ๊ฐ™์€ AWS EKS ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค ๋ฐฐํฌ ํ™˜๊ฒฝ์„ ๊ตฌ์„ฑํ•˜๊ธฐ ์œ„ํ•ด  4๊ฐ€์ง€์˜ yaml ํŒŒ์ผ์„ ์ž‘์„ฑํ•ด ๋ณผ ๊ฒƒ์ด๋‹ค.

- app ์ด๋ฆ„์€ ํŽธ์˜์ƒ demo๋กœ ํ•˜๊ฒ ๋‹ค.

- pod, deployment, service, ingress์— ๋Œ€ํ•œ ๊ฐœ๋…๋“ค์€ ๊ตฌ๊ธ€๋ง์„ ํ•˜๋ฉด ๋งค์šฐ ์ž์„ธํ•˜๊ฒŒ ๋‚˜์™€์žˆ์œผ๋ฏ€๋กœ ์‹ค์Šต ์ „์— ๊ณต๋ถ€๋ฅผ ์กฐ๊ธˆ ํ•ด๋ณด๋Š” ๊ฒƒ์„ ์ถ”์ฒœํ•œ๋‹ค.

 

1. ์—ฌ๋Ÿฌ ๊ฐœ์˜ pod๋“ค์„ ๊ด€๋ฆฌํ•˜๋Š” Deployment ( demo.yaml )

2. ๊ธฐ๋ณธ ์„ค์ •์„ ์ œ๊ณตํ•˜๋Š” Config Map( demo-cm.yaml )

3. ์™ธ๋ถ€์™€ ํ†ต์‹ ์„ ์œ„ํ•œ ingress(๊ธฐ์กด ๋ฐฐํฌ ํ™˜๊ฒฝ์—์„œ์˜ Nginx ์—ญํ• ์„ ํ•œ๋‹ค.) ( demo-ingress.yaml )

4. ingress๋กœ ์—ฐ๊ฒฐ ๋œ ์™ธ๋ถ€์™€์˜ ํ†ต์‹ ์„ pod๋“ค๊นŒ์ง€ ๋„๋‹ฌํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•ด์ฃผ๋Š” service ( demo-svc.yaml )

 + ์ด์™ธ์—๋„ EC2์˜ Volumn๊ณผ ์—ฐ๊ฒฐํ•˜์—ฌ persistence ํ•˜๊ฒŒ ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•˜๋Š” pvc ๋„ ์„ค์ •ํ•  ์ˆ˜ ์žˆ์œผ๋‚˜ ์•„์ง ์‹ค์Šต์„ ํ•ด๋ณด์ง€ ๋ชปํ•ด๋ด์„œ ๊ฑด๋„ˆ๋›ฐ๋„๋ก ํ•˜๊ฒ ๋‹ค...

 

 

3. yaml ์ž‘์„ฑ

- yamlํŒŒ์ผ๋“ค์€ ๊ณ„์ • ๊ฒฝ๋กœ์— ๋ณ„๋„์˜ ๋””๋ ‰ํ† ๋ฆฌ ํ•˜๋‚˜๋ฅผ ๋งŒ๋“ค์–ด์„œ ๋ชจ์•„๋†“์ž.

- ํŽธ์˜์ƒ namespace ์ด๋ฆ„๊ณผ ๊ฐ™์€ ๋””๋ ‰ํ† ๋ฆฌ๋ฅผ ํ•˜๋‚˜ ์ƒ์„ฑํ–ˆ๋‹ค.

ex) /home/ubuntu/demo-ns

- ํŽธ์˜์ƒ nginx ์ด๋ฏธ์ง€์˜ ํฌํŠธ๋Š” 80์œผ๋กœ ์„ค์ •ํ•œ๋‹ค.

 

 

demo.yaml (Deployment)

- deployment๋Š” replicaset ๊ณผ pod๋“ค์ด ์žˆ๋Š” ์ง‘ํ•ฉ์ด๋ผ๊ณ  ๋ณด๋ฉด ๋œ๋‹ค.

์ถœ์ฒ˜ : https://kubernetes.io/ko/docs/concepts/workloads/controllers/deployment/

- metadata์— ์ ํžŒ ์ด๋ฆ„์œผ๋กœ deployment๋ฅผ ์ƒ์„ฑํ•œ๋‹ค.

- app ์ด๋ฆ„์€ demo ์ด๋‹ค.

- spec์€ deployment ๋ฅผ ๊ตฌ์„ฑํ•˜๋Š” ์„ค์ • ๊ฐ’๋“ค์„ ์„ ์–ธํ•˜๋Š” ๊ณณ

- ์ปจํ…Œ์ด๋„ˆ ์ด๋ฏธ์ง€๋กœ nginx:1.14.2 ์ด๋ฏธ์ง€๋ฅผ ์‚ฌ์šฉํ•  ๊ฒƒ์ด๋‹ค.

 

apiVersion: apps/v1
kind: Deployment
metadata:
  name: demo
  namespace: demo-ns
  labels:
    app: demo
spec:
  replicas: 1
  selector:
    matchLabels:
      app: demo
  template:
    metadata:
      labels:
        app: demo
    spec:
      affinity:
        nodeAffinity:
          requiredDuringSchedulingIgnoredDuringExecution:
            nodeSelectorTerms:
            - matchExpressions:
              - key: kubernetes.io/arch
                operator: In
                values:
                - amd64
                - arm64
      containers:
      - name: demo
        image: nginx:1.14.2
        ports:
        - name: http
          containerPort: 80
        imagePullPolicy: Always
        env:
          - name: PROFILE
            valueFrom:
              configMapKeyRef:
                name: demo-cm
                key: PROFILE

 

 

demo-cm.yaml (Config Map)

- configmap์€ ๊ฐœ๋ฐœํ•  ๋•Œ dev, prod์™€ ๊ฐ™์ด ๊ฐœ๋ฐœ/์šด์˜ ํ™˜๊ฒฝ์„ ๋‚˜๋ˆ„๊ธฐ ์œ„ํ•ด ํ™˜๊ฒฝ๋ณ€์ˆ˜ ๋“ฑ์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ๊ณผ ๊ฐ™์€ ๋ชฉ์ ์ด๋‹ค.

- ์ „์—ญ์ ์œผ๋กœ ๊ด€๋ฆฌ๋˜๋Š” ํ•ญ๋ชฉ๋“ค์„ ๊ด€๋ฆฌํ•˜๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉ๋œ๋‹ค.

- ์ž˜ ์‚ฌ์šฉํ•˜๋ฉด ์ด์‹์ด ์‰ฌ์›Œ์ง„๋‹ค.

์ถœ์ฒ˜ : https://kubernetes.io/ko/docs/concepts/configuration/configmap/

apiVersion: v1
kind: ConfigMap
metadata:
  name: demo-cm
  namespace: demo-ns
data:
  PROFILE: dev

 

 

demo-ingress.yaml (Ingress)

- ingress๋Š” ์™ธ๋ถ€์—์„œ ์„œ๋น„์Šค๋กœ ์ ‘์†ํ•˜๊ธฐ ์œ„ํ•ด์„œ ๊ฑฐ์ณ๊ฐ€๋Š” ์—ญํ• ์„ ํ•œ๋‹ค.

- ์™ธ๋ถ€๋กœ URL์„ ๋…ธ์ถœ์‹œ์ผœ์ค˜์„œ ์ •์ƒ์ ์ธ ์™ธ๋ถ€ ํ†ต์‹ ์ด ๊ฐ€๋Šฅํ•˜๊ฒŒ ํ•œ๋‹ค.

์ถœ์ฒ˜ : https://kubernetes.io/ko/docs/concepts/services-networking/ingress/

- ๊ณต์‹ ํ™ˆํŽ˜์ด์ง€์˜ ์„ค๋ช…์œผ๋กœ๋Š”, ingress๋Š” ๋ฆฌ์†Œ์Šค ์˜ค๋ธŒ์ ํŠธ๋งŒ ์žˆ์–ด์„œ๋Š” ๋™์ž‘์ด ๋ถˆ๊ฐ€ํ•˜๊ณ , ingress controller๊ฐ€ ์žˆ์–ด์•ผ ํ•œ๋‹ค๊ณ  ํ•œ๋‹ค.

- AWS EKS์—์„œ๋Š” ์ด ์—ญํ• ์„ AWS Application Load Balancer๊ฐ€ ํ•ด์ค€๋‹ค.

- ๋”ฐ๋ผ์„œ ingress๋ฅผ ์ƒ์„ฑํ•˜๋ฉด ์•Œ์•„์„œ ๋กœ๋“œ๋ฐธ๋Ÿฐ์„œ๊ฐ€ ์ƒ์„ฑ๋˜๋Š” ๊ฒƒ์„ ๋ณผ ์ˆ˜ ์žˆ๋‹ค.

 

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: demo-ingress
  namespace: demo-ns
  annotations:
    kubernetes.io/ingress.class: alb
    alb.ingress.kubernetes.io/scheme: internet-facing
    alb.ingress.kubernetes.io/target-type: ip
spec:
  rules:
  - http:
      paths:
      - path: /
        pathType: Prefix
        backend:
          service:
            name: demo-svc
            port:
              number: 80

- annotations key ๊ฐ’์ด EKS์—์„œ์˜ Application loadbalancer๋ฅผ ์„ค์ •ํ•ด์ฃผ๊ธฐ ์œ„ํ•œ ๊ฐ’๋“ค์ด๋‹ค.

- ์œ„์—์„œ ingress๋ฅผ ์ƒ์„ฑํ•˜๋ฉด ์•Œ์•„์„œ ๋กœ๋“œ๋ฐธ๋Ÿฐ์„œ๊ฐ€ ์ƒ์„ฑ๋œ๋‹ค๊ณ  ํ–ˆ๋Š”๋ฐ

- ์ด ๊ธฐ๋Šฅ์„ ์ž‘๋™ํ•˜๊ฒŒ ํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” LoadBalancer Controller๋ผ๋Š” ๊ฒƒ์„ ์ถ”๊ฐ€ํ•ด์ค˜์•ผํ•˜๊ณ .

- ์ด๊ฑธ ๋™์ž‘ํ•˜๊ฒŒ ํ•˜๊ธฐ ์œ„ํ•ด์„œ IAM Management ํŽ˜์ด์ง€์—์„œ ์ž๊ฒฉ ์ฆ๋ช… ๊ณต๊ธ‰์ž๋ฅผ ์„ค์ •ํ•ด์ค˜์•ผํ•œ๋‹ค.

 

ingress-1 : LoadBalancer Controller ์ถ”๊ฐ€

-https://docs.aws.amazon.com/ko_kr/eks/latest/userguide/aws-load-balancer-controller.html

 

AWS Load Balancer Controller ์ถ”๊ฐ€ ๊ธฐ๋Šฅ ์„ค์น˜ - Amazon EKS

๋ฐฐํฌ๋œ ์ฐจํŠธ๋Š” ๋ณด์•ˆ ์—…๋ฐ์ดํŠธ๋ฅผ ์ž๋™์œผ๋กœ ์ˆ˜์‹ ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์ƒˆ ์ฐจํŠธ๊ฐ€ ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•ด์ง€๋ฉด ์ˆ˜๋™์œผ๋กœ ์—…๊ทธ๋ ˆ์ด๋“œํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์—…๊ทธ๋ ˆ์ด๋“œ ์‹œ ์ด์ „ ๋ช…๋ น์—์„œ install์„ upgrade๋กœ ๋ณ€๊ฒฝํ•˜๋˜, ์ด์ „ ๋ช…๋ น

docs.aws.amazon.com

- ์šฐ์„  controller ์„ค์น˜๋ฅผ ์œ„ํ•ด LoadBalancerControllerIAMPolicy ์ •์ฑ…์„ ์ถ”๊ฐ€ํ•ด์ค˜์•ผํ•œ๋‹ค.

- ์ •์ฑ… ์„ค์ •์ด ๋‹ด๊ธด .json ์„ค์น˜

$ curl -o iam_policy.json https://raw.githubusercontent.com/kubernetes-sigs/aws-load-balancer-controller/v2.4.3/docs/install/iam_policy.json

- .json ํŒŒ์ผ์„ ์ด์šฉํ•œ ์ •์ฑ… ์ƒ์„ฑ

$ aws iam create-policy \
    --policy-name AWSLoadBalancerControllerIAMPolicy \
    --policy-document file://iam_policy.json

 

- ์ดํ›„ ๊ฐ€์ด๋“œ๋ฌธ์„œ์—์„œ๋Š” controller ์„ค์น˜๋ฅผ 2๊ฐ€์ง€ ๋ฐฉ๋ฒ•์œผ๋กœ ์†Œ๊ฐœํ•œ๋‹ค.

- ์ฒซ ๋ฒˆ์งธ๋Š” helm์„ ์ด์šฉํ•œ ์„ค์น˜

- ๋‘ ๋ฒˆ์งธ๋Š” kubectl ์„ ์ด์šฉํ•œ ์„ค์น˜์ด๋‹ค.

- ๋‘ ๋ฒˆ์งธ ๋ฐฉ๋ฒ•์œผ๋กœ ์‹œ๋„ํ–ˆ๋‹ค๊ฐ€ ํด๋Ÿฌ์Šคํ„ฐ๋ฅผ ๋‹ค์‹œ ์ƒ์„ฑํ•˜๋Š” ๋ถˆ์ƒ์‚ฌ๊ฐ€ ์žˆ์—ˆ๋‹ค..

(์„ค์น˜ ํ›„ ingress ๋ฅผ apply ํ–ˆ๋”๋‹ˆ ์•„๋ž˜ ์˜ค๋ฅ˜ ๋ฐœ์ƒ)

Internal error occurred: failed calling webhook "vingress.elbv2.k8s.aws": the server could not find the requested resource

- ์›์ธ์€ ์ •์ƒ์ ์œผ๋กœ ์„ค์น˜๊ฐ€ ๋˜์ง€ ์•Š์•„ AWS์˜ Loadbalancer์™€ ์ •์ƒ์ ์œผ๋กœ ์—ฐ๊ฒฐ๋˜์ง€ ์•Š์€ ๊ฒƒ ๊ฐ™๋‹ค.

- ๋กœ๊ทธ๋‚˜ ์ด๋Ÿฐ๊ฑธ ์ข€ ๋ดค์–ด์•ผํ–ˆ๋Š”๋ฐ ๋ฌด์ง€์„ฑ์œผ๋กœ ํด๋Ÿฌ์Šคํ„ฐ์™€ ๊ด€๋ จ ์„œ๋น„์Šค๋“ค์„ ๋‹ค ์ œ๊ฑฐํ–ˆ๋‹ค..

 

- Helm์„ ์ด์šฉํ•œ ์„ค์น˜๋กœ ์ง„ํ–‰ํ•˜๊ฒ ๋‹ค.

- ์šฐ์„  Helm์„ ์„ค์น˜ํ•ด์•ผํ•œ๋‹ค.

$ curl https://baltocdn.com/helm/signing.asc | sudo apt-key add -
$ echo "deb https://baltocdn.com/helm/stable/debian/ all main" | sudo tee /etc/apt/sources.list.d/helm-stable-debian.list
$ sudo apt-get install helm

- ์ดํ›„ Helm์ €์žฅ์†Œ ๋“ฑ๋ก

$ helm repo add eks https://aws.github.io/eks-charts

- ์ €์žฅ์†Œ ์—…๋ฐ์ดํŠธ

$ helm repo update

- controller ์„ค์น˜

- ์—ฌ๊ธฐ์„œ ๋ณธ์ธ์˜ ํด๋Ÿฌ์Šคํ„ฐ ์ด๋ฆ„, region , vpc-id๋ฅผ ์ž…๋ ฅํ•ด์ฃผ์ž.

- 602401143452 ๋ผ๋Š” ๊ณ„์ •์˜ ECR์—์„œ ์ด๋ฏธ์ง€๋ฅผ ๋ฐ›์•„์™€ ์„ค์น˜ํ•˜๋Š” ๊ฒƒ์œผ๋กœ ๋ณด์ธ๋‹ค.(AWS์—์„œ ์‰ฌ์šด ์„ค์น˜๋ฅผ ์œ„ํ•ด ์ œ๊ณตํ•˜๋Š” ๋“ฏ)

$ helm install aws-load-balancer-controller eks/aws-load-balancer-controller -n kube-system \
--set clusterName={cluster-name} \ 
--set serviceAccount.create=false \ 
--set serviceAccount.name=aws-load-balancer-controller \ 
--set image.repository=602401143452.dkr.ecr.{region}.amazonaws.com/amazon/aws-load-balancer-controller \
--set region={region} \
--set vpcid={ํด๋Ÿฌ์Šคํ„ฐ ์ƒ์„ฑ์— ์‚ฌ์šฉํ•œ vpc-id}

- ์„ค์น˜ ํ›„ ์•„๋ž˜์™€ ๊ฐ™์ด ๋กœ๋“œ๋ฐธ๋Ÿฐ์„œ ์ปจํŠธ๋กค๋Ÿฌ๊ฐ€ kube-system ์ด๋ผ๋Š” ๋„ค์ž„์ŠคํŽ˜์ด์Šค์— deployment๋กœ ์ž˜ ๋– ์žˆ๋Š” ๊ฒƒ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค.

$ kubectl get deployment -n kube-system

 

 

 

ingress-2: ์ž๊ฒฉ ์ฆ๋ช… ๊ณต๊ธ‰์ž ์ถ”๊ฐ€ ์ถ”๊ฐ€

- ์šฐ์„  EKS ์— ์ ‘์†ํ•˜์—ฌ ๋ณธ์ธ์˜ ํด๋Ÿฌ์Šคํ„ฐ์˜ Open ID Connection ๊ณต๊ธ‰์ž URL์„ ๋ณต์‚ฌํ•ด์•ผ ํ•œ๋‹ค.

- EKS -> ํด๋Ÿฌ์Šคํ„ฐ -> ๊ฐœ์š” ํƒญ์— ์žˆ๋‹ค.

- IAM ์— ์ž๊ฒฉ์ฆ๋ช…๊ณต๊ธ‰์ž ํƒญ ์ ‘์†-> ์ž๊ฒฉ์ฆ๋ช…๊ณต๊ธ‰์ž ์ถ”๊ฐ€

 

- OpenID Connect ์„ ํƒ ํ›„ ๊ณต๊ธ‰์ž URL์— ์•„๊นŒ ๋ณต์‚ฌํ•ด ์˜จ OpenID๋ฅผ ์ž…๋ ฅํ•˜๊ณ  ์ง€๋ฌธ ๊ฐ€์ ธ์˜ค๊ธฐ

- ๋Œ€์ƒ์—๋Š” sts.amazonaws.com ์ž…๋ ฅ ํ›„ ๊ณต๊ธ‰์ž ์ถ”๊ฐ€ ๋ฒ„ํŠผ ํด๋ฆญ

- ์—ฌ๊ธฐ๊นŒ์ง€ ์ง„ํ–‰ํ–ˆ๋‹ค๋ฉด ์ด์ œ Ingress๋ฅผ ๋“ฑ๋กํ•  ๊ฒฝ์šฐ ๋กœ๋“œ๋ฐธ๋Ÿฐ์„œ๊นŒ์ง€ ์ž๋™์œผ๋กœ ์ƒ์„ฑ๋˜๋Š” ํ”Œ๋กœ์šฐ๋ฅผ ํƒˆ ์ˆ˜ ์žˆ๋‹ค.

 

 

 

 

demo-svc.yaml (service)

- service๋Š” pod ์ง‘ํ•ฉ์—์„œ ์‹คํ–‰๋˜๊ณ ์žˆ๋Š” application ๋“ค์„ ์™ธ๋ถ€๋กœ ๋…ธ์ถœ์‹œ์ผœ ์ฃผ๋Š” ์—ญํ• ์„ ํ•œ๋‹ค.

- ingress๋Š” ์™ธ๋ถ€ ์ธํ„ฐ๋„ท๊ณผ์˜ ์—ฐ๊ฒฐ์„ ๋‹ด๋‹นํ•œ๋‹ค๊ณ  ํ•œ๋‹ค๋ฉด,

- svc ๋Š” application ๋“ค๊ฐ„์˜ ์—ฐ๊ฒฐ + Ingress์™€์˜ ์—ฐ๊ฒฐ์„ ๋‹ด๋‹นํ•œ๋‹ค๊ณ  ์ƒ๊ฐํ•˜๋ฉด ๋  ๊ฒƒ ๊ฐ™๋‹ค.

- ์ผ๋ฐ˜์ ์œผ๋กœ app - app ํ†ต์‹ ์ด๋‚˜ frontend - backend๊ฐ„ ํ†ต์‹ ๋„ service๋ฅผ ํ†ตํ•ด ์—ฐ๊ฒฐํ•œ๋‹ค๊ณ  ๋ณด๋ฉด ๋œ๋‹ค.

์ถœ์ฒ˜ : https://kubernetes.io/ko/docs/concepts/services-networking/service/

 

apiVersion: v1
kind: Service
metadata:
  name: demo-svc
  namespace: demo-ns
spec:
  selector:
    app: demo
  ports:
    - protocol: TCP
      port: 80
      targetPort: 80

 

 

 

 

 

4.  Apply & Deploy

- ์—ฌ๊ธฐ๊นŒ์ง€ ์ง„ํ–‰ํ–ˆ๋‹ค๋ฉด pod๋“ค์„ ์ƒ์„ฑํ•˜๊ณ  ๋ฐฐํฌํ•  ์ค€๋น„๊ฐ€ ๋œ ๊ฒƒ์ด๋‹ค.

- ์•„๋ž˜ ๋ช…๋ น์–ด๋ฅผ ํ†ตํ•ด kubernetes์— yaml๋“ค์„ ๋ฐฐํฌํ•ด๋ณด์ž

kubectl apply -f <yaml> -n <mamespace>

 

- configmap ๋ฐฐํฌ

$ kubectl apply -f demo-cm.yaml -n demo-ns

configmap/demo-cm created

 

- ์•„๋ž˜ ๋ช…๋ น์–ด๋ฅผ ์ž…๋ ฅํ•˜๋ฉด ํ˜„์žฌ ๋ฐฐํฌ ๋œ configmap  object์˜ ์ •๋ณด๋ฅผ ๋ณผ ์ˆ˜ ์žˆ๋‹ค.

- ๋˜ํ•œ ์ˆ˜์ •๋„ ๊ฐ€๋Šฅํ•˜๋‹ค.

$ kubectl edit configmap -n demo-ns

 

 

 

 

- service ๋ฐฐํฌ

$ kubectl apply -f demo-svc.yaml  -n demo-ns

service/demo-svc created

- ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ ์•„๋ž˜ ๋ช…๋ น์–ด๋ฅผ ์ž…๋ ฅํ•˜๋ฉด ํ˜„์žฌ ๋ฐฐํฌ ๋œ service object์˜ ์ •๋ณด๋ฅผ ๋ณผ ์ˆ˜ ์žˆ๋‹ค.

- ๋˜ํ•œ ์ˆ˜์ •๋„ ๊ฐ€๋Šฅํ•˜๋‹ค.

$ kubectl edit svc -n demo-ns

 

- ingress ๋ฐฐํฌ

$ kubectl apply -f demo-ingress.yaml -n demo-ns
$ kubectl edit ingress -n demo-ns

- ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ ๋ช…๋ น์–ด๋ฅผ ์ž…๋ ฅํ•˜๋ฉด ํ˜„์žฌ ๋ฐฐํฌ ๋œ ingress object์˜ ์ •๋ณด๋ฅผ ๋ณผ ์ˆ˜ ์žˆ๋‹ค.

- ๋˜ํ•œ AWS console -> ๋กœ๋“œ๋ฐธ๋Ÿฐ์„œ์— ์ ‘์†ํ•ด๋ณด๋ฉด ๋กœ๋“œ๋ฐธ๋Ÿฐ์„œ ํ•˜๋‚˜๊ฐ€ ์ƒ์„ฑ๋˜๊ณ  ์žˆ๋Š” ๊ฒƒ์„ ๋ณผ ์ˆ˜ ์žˆ๋‹ค.

- ์ด์ œ ์ด ๋กœ๋“œ๋ฐธ๋Ÿฐ์„œ๋ฅผ ํ†ตํ•ด ํด๋Ÿฌ์Šคํ„ฐ์— ์ ‘์†์ด ๊ฐ€๋Šฅํ•ด์ง„๋‹ค.

 

- deployment ๋ฐฐํฌ

$ kubectl apply -f demo.yaml -n demo-ns
$ kubectl edit deployment demo -n demo-ns

 

- ์ด์ œ deployment๊ฐ€ ์ƒ์„ฑ๋˜๊ณ  application ๋“ค์ด ๋ฐฐํฌ๋˜๊ธฐ ์‹œ์ž‘ํ•œ๋‹ค.

- edit ๋ช…๋ น์–ด๋ฅผ ํ†ตํ•ด deployment ๋ฅผ ํ™•์ธํ•ด๋ณด๋ฉด replicaset ๊ฐฏ์ˆ˜, ์ •์ฑ… ๋“ฑ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค.

 

 

 

5. application ์ ‘์†ํ•ด๋ณด๊ธฐ

- ingress ์ƒ์„ฑ์„ ํ†ตํ•ด ์ƒ์„ฑ๋œ loadbalancer ์˜ url๋กœ ์ ‘์†ํ•ด๋ณด์ž

- ์ด์ œ ์ด ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค ํ™˜๊ฒฝ์€ yaml์— ์ž‘์„ฑํ•œ๋Œ€๋กœ pod/node๋“ค์„ ๋Š˜๋ฆฌ๊ฑฐ๋‚˜ ์ค„์ด๋ฉด์„œ

- ์›ํ™œํ•œ ๋ฐฐํฌ ํ™˜๊ฒฝ์„ ์ œ๊ณตํ• ๊ฒƒ์ด๋‹ค.

 

 

 

 

๋งˆ๋ฌด๋ฆฌ

์—ฌ๊ธฐ๊นŒ์ง€ pod์™€ deployment, ingress, service ๋“ค์„ ์ƒ์„ฑํ•ด๋ณด์•˜๋‹ค.

๋‹ค์Œ ํฌ์ŠคํŒ…์—์„œ๋Š” helm ์„ ์—ฐ๋™ํ•˜์—ฌ ์œ„์—์„œ ๊ฐ๊ฐ ์ž‘์—…ํ•œ ๋ฐฐํฌํ™˜๊ฒฝ๋“ค apply๋ฅผ ์ผ๊ด„์ ์œผ๋กœ ์ ์šฉํ•ด ๋ณผ ๊ฒƒ์ด๋‹ค.

 

 

 

-ํผ๊ฐ€์‹ค ๋•Œ๋Š” ์ถœ์ฒ˜๋ฅผ ๊ผญ ๊ฐ™์ด ์ ์–ด์„œ ์˜ฌ๋ ค์ฃผ์„ธ์š”!

 

๋ฐ˜์‘ํ˜•