๐ก ์ฌ์ ์ค๋น
- Terraform ์ฌ์ฉ์ ์ํ ํ๊ฒฝ์ธํ ์ ์งํํด์ค๋ค.
- EKS ํด๋ฌ์คํฐ ์์ฑ Terraform ์ฝ๋ ์ค๋น
#1 ํ ๋ผํผ ์คํ
eks-terraform-final ์์ถ์ ํผ๋ค eks-terraform-final๋๋ ํ ๋ฆฌ๋ก ๋ค์ด๊ฐ์ ๋ค์๊ณผ ๊ฐ์ด ๋ช ๋ น์ ์งํ
terraform init
terraform plan
terraform apply →< yes
15~20๋ถ์ ๋ IAM ๋ฐ VPC์ ํด๋ฌ์คํฐ๋ฑ ๋ฆฌ์์ค๋ค์ด ์์ฑ๋๋ค.
๐ก Trouble Shooting
kubernetes ์ฝ์ ์ ๊ทผ ๊ถํ ์ด์
#2 AWS Load Balancer ์ปจํธ๋กค๋ฌ ์์ฑ
์ค์น ๊ณผ์
IAM OIDC(OpenID Connect) identity Provider๋ฅผ ์์ฑ
eksctl utils associate-iam-oidc-provider --region us-east-2 --cluster eks-JaeHyuk --approve
AWS Load Balancer Controller์ ๋ถ์ฌํ IAM Policy๋ฅผ ์์ฑํ๋ ์์
aws iam create-policy --policy-name AWSLoadBalancerControllerIAMPolicy --policy-document file://iam_policy.json
AWS Load Balancer Controller๋ฅผ ์ํ ServiceAccount๋ฅผ ์์ฑ
eksctl create iamserviceaccount --cluster eks-JaeHyuk --namespace kube-system --name aws-load-balancer-controller --attach-policy-arn arn:aws:iam::871065065486:policy/AWSLoadBalancerControllerIAMPolicy --override-existing-serviceaccounts --approve
์ธ์ฆ์ ๊ตฌ์ฑ์ ์นํ ์ ์ฝ์ ํ ์ ์๋๋ก TLS์ธ์ฆ์๋ฅผ ์๋์ผ๋ก ํ๋ก๋น์ ๋ ๋ฐ ๊ด๋ฆฌํ๋ ์คํ ์์ค ์ค์น
kubectl apply -f https://github.com/cert-manager/cert-manager/releases/download/v1.12.0/cert-manager.yaml
ํด๋ฌ์คํฐ์ ์ปจํธ๋กค๋ฌ ์ถ๊ฐ
kubectl apply -f v2_5_4_full.yaml
kubectl apply -f v2_5_4_ingclass.yaml
์ค์น ํ์ธ
kubectl get deployment -n kube-system aws-load-balancer-controller
kubectl get sa aws-load-balancer-controller -n kube-system -o yaml
์ข ํฉ ์คํฌ๋ฆฝํธ
aws eks update-kubeconfig --region us-east-2 --name eks-JaeHyuk
eksctl utils associate-iam-oidc-provider --region us-east-2 --cluster eks-JaeHyuk --approve
aws iam create-policy --policy-name AWSLoadBalancerControllerIAMPolicy --policy-document file://iam_policy.json
eksctl create iamserviceaccount --cluster eks-JaeHyuk --namespace kube-system --name aws-load-balancer-controller --attach-policy-arn arn:aws:iam::871065065486:policy/AWSLoadBalancerControllerIAMPolicy --override-existing-serviceaccounts --approve
kubectl apply -f https://github.com/cert-manager/cert-manager/releases/download/v1.12.0/cert-manager.yaml
kubectl apply -f v2_5_4_full.yaml
kubectl apply -f v2_5_4_ingclass.yaml
kubectl get deployment -n kube-system aws-load-balancer-controller
kubectl get sa aws-load-balancer-controller -n kube-system -o yaml
๐ก Trouble Shooting
aws-load-balancer-controller ๊ฐ ์ ์ด๋ค์ก๋์ง๋ฅผ ํ์ธํด๋ณด๋ฉด ๋ค์๊ณผ๊ฐ์ด ๊ฒฐ๊ณผ๊ฐ ๋์์ผํ์ง๋ง ๊ฐํน ๊ณผ์ ์ ๋ฐ๋ณตํ๋ค ๋ณด๋ฉด 0/1 ์ด ๋๋ ๊ฒฝ์ฐ๊ฐ ์ข ์ข ์๋ค.
#3 ECR ์ด๋ฏธ์ง ํธ์ฌ
๐ก ๋จผ์ ์ค๋ฅ๋ฅผ ๋ฐฉ์งํ๊ธฐ์ํด ๋ฐฐํฌํ ์๋น์ค๋ฅผ ๋ฏธ๋ฆฌ ๋์ปคํํด๋ณด๋ฉด์ ๋์ปคํ ๊ณผ์ ์์ ์ด๋ฏธ์ง ์ค๋ฅ๊ฐ ์๋์ง ๋จผ์ ํ์ธํ๋๊ฒ์ด ์ข๋ค.
์๋น์ค ๋ฐฐํฌ๋ฅผ ์ํด ๋์ปค ์ด๋ฏธ์ง๋ฅผ aws ecr ์ ์ฅ์๋ฅผ ์ด์ฉํ ๊ฒ์ด๋ฉฐ ๋ค์๊ณผ๊ฐ์ ๋ช ๋ น์ด๋ก ์ฝ๊ฒ ๋ฐฐํฌ๊ฐ ๊ฐ๋ฅํ๋ค.
์๋น์ค ์ฝ๋๊ฐ ์๋ ๋๋ ํ ๋ฆฌ ์ด๋
cd ์๋น์ค ๋๋ ํ ๋ฆฌ
ecr ๋ ํผ์งํ ๋ฆฌ ์์ฑ
aws ecr create-repository --repository-name osint-flask --image-scanning-configuration scanOnPush=true --region us-east-2
์ธ์ฆ ํ ํฐ์ ๊ฒ์ํ๊ณ ๋ ์ง์คํธ๋ฆฌ์ ๋ํด Docker ํด๋ผ์ด์ธํธ๋ฅผ ์ธ์ฆ
aws ecr get-login-password --region us-east-2 | docker login --username AWS --password-stdin 871065065486.dkr.ecr.us-east-2.amazonaws.com
๋ค์ ๋ช ๋ น์ ์ฌ์ฉํ์ฌ ๋์ปค ์ด๋ฏธ์ง๋ฅผ ๋น๋(์ด๋ฏธ์ง๋ฅผ ์ด๋ฏธ ๋น๋ํ ๊ฒฝ์ฐ์๋ ์ด ๋จ๊ณ๋ฅผ ๊ฑด๋๋ธ ์ ์๋ค.)
docker build -t jenkinsflask .
๋น๋๊ฐ ์๋ฃ๋๋ฉด ์ด๋ฏธ์ง์ ํ๊ทธ๋ฅผ ์ง์ ํ์ฌ ์ด ๋ฆฌํฌ์งํ ๋ฆฌ์ ํธ์ํ ์ ์์ต๋๋ค.
docker tag jenkinsflask:latest 871065065486.dkr.ecr.us-east-2.amazonaws.com/jenkinsflask:latest
๋ค์ ๋ช ๋ น์ ์คํํ์ฌ ์ด ์ด๋ฏธ์ง๋ฅผ ์๋ก ์์ฑํ AWS ๋ฆฌํฌ์งํ ๋ฆฌ๋ก ํธ์ํฉ๋๋ค.
docker push 871065065486.dkr.ecr.us-east-2.amazonaws.com/jenkinsflask:latest
๋ค์๊ณผ ๊ฐ์ด ์ด๋ฏธ์ง ๋ฐฐํฌ๊ฐ ์๋ฃ๋์ด์๋ค.
์ข ํฉ ์คํฌ๋ฆฝํธ
cd ์๋น์ค ๋๋ ํ ๋ฆฌ
aws ecr create-repository --repository-name osint-flask --image-scanning-configuration scanOnPush=true --region us-east-2
aws ecr get-login-password --region us-east-2 | docker login --username AWS --password-stdin 871065065486.dkr.ecr.us-east-2.amazonaws.com
docker build -t osint-flask .
docker tag osint-flask:latest 871065065486.dkr.ecr.us-east-2.amazonaws.com/osint-flask:latest
docker push 871065065486.dkr.ecr.us-east-2.amazonaws.com/osint-flask:latest
#4 ์๋น์ค ๋ฐฐํฌ
๋ค์๊ณผ ๊ฐ์ด EKS ํด๋ฌ์คํฐ์ ์๋น์ค๋ฅผ ๋ฐฐํฌํ๊ธฐ์ํด YAML ํ์ผ์ ์์ฑํด ๋ฐฐํฌ๋ฅผ ์งํํ๋ค.
ํ์๋ FALSK๋ฅผ ์ฌ์ฉํ๋ ์๋น์ค๋ฅผ ๋ฐฐํฌํ๋ค.
flask-deployment.yaml
:- ์ด ํ์ผ์ Kubernetes Deployment๋ฅผ ์ ์
- Deployment๋ Pod์ ๋ ํ๋ฆฌ์นด๋ฅผ ๊ด๋ฆฌํ๋ฉฐ, ์ดํ๋ฆฌ์ผ์ด์ ์ ์ธ์คํด์ค๋ฅผ ์คํํ๊ณ ๊ด๋ฆฌํ๋๋ฐ ์ฌ์ฉ
- Flask ์ดํ๋ฆฌ์ผ์ด์ ์ ์คํํ๋ ์ปจํ ์ด๋๊ฐ ํฌํจ๋ Pod์ด ๋ฐฐํฌ
flask-service.yaml
:- ์ด ํ์ผ์ Kubernetes Service๋ฅผ ์ ์
- Service๋ ์ฌ๋ฌ Pod ๊ฐ์ ๋คํธ์ํฌ ํธ๋ํฝ์ ๊ด๋ฆฌํ๋ ๋ฐ ์ฌ์ฉ๋๋ฉฐ, ์ดํ๋ฆฌ์ผ์ด์ ์ ์ธ๋ถ์์ ์ ๊ทผํ ์ ์๋ ์๋ํฌ์ธํธ๋ฅผ ์ ๊ณต
- Flask ์ดํ๋ฆฌ์ผ์ด์ ์ ๋ํ ๋ก๋ ๋ฐธ๋ฐ์ฑ ๋ฐ ์๋น์ค ๋์ค์ปค๋ฒ๋ฆฌ๋ฅผ ์ ๊ณตํ๊ธฐ ์ํด ์์ฑ๋ ์๋น์ค๋ฅผ ์
flask-ingress.yaml
:- ์ด ํ์ผ์ Kubernetes Ingress๋ฅผ ์ ์
- Ingress๋ ํด๋ฌ์คํฐ ์ธ๋ถ์์ ํด๋ฌ์คํฐ ๋ด๋ถ์ ์๋น์ค๋ก์ HTTP ๋ฐ HTTPS ๋ผ์ฐํ ๊ท์น์ ์ ์
- Flask ์ดํ๋ฆฌ์ผ์ด์ ์ ๋ํ ์ธ๋ถ์์์ HTTP ํธ๋ํฝ์ ์ฒ๋ฆฌํ๊ณ , ํน์ ๊ฒฝ๋ก์ ๋ฐ๋ผ ์ดํ๋ฆฌ์ผ์ด์ ์๋น์ค๋ก ๋ผ์ฐํ ํ๋ ๊ท์น์ ์ ์
flask-deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: osint-flask
namespace: default
spec:
replicas: 3
selector:
matchLabels:
app: osint-flask
template:
metadata:
labels:
app: osint-flask
spec:
containers:
- name: osint-flask
image: 871065065486.dkr.ecr.us-east-2.amazonaws.com/osint-flask:latest
imagePullPolicy: Always
ports:
- containerPort: 5000
flask-ingress.yaml
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: 'osint-flask-ingress'
namespace: default
annotations:
alb.ingress.kubernetes.io/scheme: internet-facing
alb.ingress.kubernetes.io/target-type: ip
alb.ingress.kubernetes.io/group.name: eks-demo-group
alb.ingress.kubernetes.io/group.order: '1'
spec:
ingressClassName: alb
rules:
- http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: 'osint-flask'
port:
number: 5000
flask-service.yaml
apiVersion: v1
kind: Service
metadata:
name: osint-flask
annotations:
alb.ingress.kubernetes.io/healthcheck-path: '/'
spec:
selector:
app: osint-flask
type: NodePort
ports:
- port: 5000 # ์๋น์ค๊ฐ ์์ฑํ ํฌํธ
targetPort: 5000 # ์๋น์ค๊ฐ ์ ๊ทผํ pod์ ํฌํธ
protocol: TCP
๋ฐฐํฌ ๋ช ๋ น์ด
aws eks update-kubeconfig --region us-east-2 --name eks-JaeHyuk
kubectl apply -f flask-deployment.yaml
kubectl apply -f flask-service.yaml
kubectl apply -f flask-ingress.yaml
#1 ~ #4 ์คํฌ๋ฆฝํธ (ecr ์ด๋ฏธ์ง ๋ฐฐํฌ ๋์๋ค๋ ๊ฐ์ )
์ฝ๋ ๊ตฌ์ฑ
eks-terraform-final
โโโ script
โโโ ingrass
โ โโโ iam_policy.json
โ โโโ v2_5_4_full.yaml
โ โโโ v2_5_4_ingclass.yaml
โโโ service
โ โโโ flask-deployment.yaml
โ โโโ flask-ingress.yaml
โโโ โโโ flask-service.yaml
@REM aws-auth ------------------
eksctl create iamidentitymapping --cluster eks-JaeHyuk --arn arn:aws:iam::871065065486:user/JaeHyuk --username JaeHyuk --group system:masters
@REM ์ธ๊ทธ๋ ์ค ์ปจํธ๋กค๋ฌ ๋ง๋ค๊ธฐ -----------------------------------------------------
cd script\ingrass
aws eks update-kubeconfig --region us-east-2 --name eks-JaeHyuk
eksctl utils associate-iam-oidc-provider --region us-east-2 --cluster eks-JaeHyuk --approve
aws iam create-policy --policy-name AWSLoadBalancerControllerIAMPolicy --policy-document file://iam_policy.json
eksctl create iamserviceaccount --cluster eks-JaeHyuk --namespace kube-system --name aws-load-balancer-controller --attach-policy-arn arn:aws:iam::871065065486:policy/AWSLoadBalancerControllerIAMPolicy --override-existing-serviceaccounts --approve
kubectl apply -f https://github.com/cert-manager/cert-manager/releases/download/v1.12.0/cert-manager.yaml
kubectl apply -f v2_5_4_full.yaml
kubectl apply -f v2_5_4_ingclass.yaml
kubectl get deployment -n kube-system aws-load-balancer-controller
kubectl get sa aws-load-balancer-controller -n kube-system -o yaml
@REM ์ญ์
pause
kubectl delete -f v2_5_4_ingclass.yaml
kubectl delete -f v2_5_4_full.yaml
kubectl delete -f cert-manager.yaml
eksctl delete iamserviceaccount --cluster eks-JaeHyuk --namespace kube-system --name aws-load-balancer-controller
aws iam delete-policy --policy-arn arn:aws:iam::871065065486:policy/AWSLoadBalancerControllerIAMPolicy
eksctl utils disassociate-iam-oidc-provider --region us-east-2 --cluster eks-JaeHyuk
@REM ์ฌ์ค์น
eksctl utils associate-iam-oidc-provider --region us-east-2 --cluster eks-JaeHyuk --approve
aws iam create-policy --policy-name AWSLoadBalancerControllerIAMPolicy --policy-document file://iam_policy.json
eksctl create iamserviceaccount --cluster eks-JaeHyuk --namespace kube-system --name aws-load-balancer-controller --attach-policy-arn arn:aws:iam::871065065486:policy/AWSLoadBalancerControllerIAMPolicy --override-existing-serviceaccounts --approve
kubectl get deployment -n kube-system aws-load-balancer-controller
kubectl get sa aws-load-balancer-controller -n kube-system -o yaml
cd ../../
@REM ์๋น์ค ๋ฐฐํฌ ----------------------------------------------------------------------
pause
cd D:\wpgur\terraform\eks-terraform-final\JUNGSINT_menifest
aws eks update-kubeconfig --region us-east-2 --name eks-JaeHyuk
kubectl apply -f flask-deployment.yaml
kubectl apply -f flask-service.yaml
kubectl apply -f flask-ingress.yaml
powershell -Command "echo http://$(kubectl get ingress/osint-flask-ingress -o jsonpath='{.status.loadBalancer.ingress[*].hostname}')/"
cd ../
'DevOps' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
Jenkins + gitops (0) | 2023.12.18 |
---|---|
CI / CD ๋? (0) | 2023.12.18 |
EKS์์ ๊ธฐ์กด ์๋น์ค์ DB(mysql) ์ฐ๊ฒฐ ๋ฐฉ๋ฒ(pod ๊ฐ ํต์ ) (0) | 2023.12.18 |
EKS ๊ตฌ์ถ ํ ๋ผํผ ์ฝ๋ ์ค๋ช (0) | 2023.12.18 |
์ฟ ๋ฒ๋คํฐ์ค(K8) , EKS๋? (1) | 2023.12.17 |