반응형
인프라 구축 과정
Kubernates의 Pod에서 사용 할 Docker Image 생성
- Kubernates에서 사용할 환경변수를 사용하여 프로젝트 수정
# java application.yml
${env}
# python
import os
os.getenv('env')
- Docker Image를 Docker hub에 배포
docker build . -t wjdgns2/sqc-backend:latest
docker build . -t wjdgns2/sqc-frontend:latest
docker build . -t wjdgns2/sqc-ai:latest
docker login
docker push wjdgns2/sqc-backend:latest
docker push wjdgns2/sqc-frontend:latest
docker push wjdgns2/sqc-ai:latest
EKS 구축하기
- IAM에서 AmazonEKSClusterPolicy 권한을 가지는 규칙 설정
- VPC 구성
- IAM에서 설치된 EKS 공급자 URL로 자격 증명 관리자 생성
반응형
EKS에 적용할 Node Group 정의
- Node Group에서 이용할 Node에 대한 IAM에서 생성
참고 : https://docs.aws.amazon.com/eks/latest/userguide/create-node-role.html#create-worker-node-role
- VPC CNI에 대한 역할을 IAM에서 생성
- 정책은 AmazonEKS_CNI_Policy를 선택해준다.
신뢰관계에서 아래와 같이 변경한다.
aud": "sts.amazonaws.com" → sub": "system:serviceaccount:kube-system:aws-node"
이제 이 역할을 VPC CNI에 부여한다.
- Node에 대한 보안 그룹 생성
- Control Plane 에 대한 보안 그룹 정의( Cluster 보안 그룹 )
AWS CLI을 활용하여 Kubernates Service 배포
- AWS Configure로 계정에 접근
AWS Access Key ID [None]: your-access-key-id
AWS Secret Access Key [None]: your-secret-access-key
Default region name [None]: ap-northeast-2
Default output format [None]: json
- 접근 후 명령어를 통해 Node Group 의 Status Check
aws eks describe-nodegroup --cluster-name SQC --nodegroup-name sqc-node-group
- AWS Cli를 통한 클러스터 내 kubeconfig와의 연결 설정
# kubernates 파일이 있는 경로에서
kubectl apply -f ./
# 아래 명령어로 로컬 kubeconfig를 Cluster에 반영
aws eks update-kubeconfig --region ap-northeast-2 --name SQC
- SSH 접속을 위한 pem권한 변경 ( Windows )
접속 시 pem에 관련되서 안전하지 않다고 문제가 발생하여 아래와 같이 권한을 변경해줬습니다.
icacls ---.pem /inheritance:r /grant:r "%USERNAME%":r
/inheritance:r: 상속된 권한을 제거합니다.
/grant:r "%USERNAME%":r: 현재 사용자에 대해 읽기 전용 권한을 부여합니다.
Helm 설치 후 Nginx Ingress Controller 설치
helm repo add ingress-nginx https://kubernetes.github.io/ingress-nginx
helm repo update
helm install nginx-ingress ingress-nginx/ingress-nginx
# ALB로 변경하기로 하여 삭제
helm uninstall nginx-ingress
- AWS LoadBalancer 도입 [1]
를 참고해서 생성하면 되는데 현재 로컬 PC의 OS가 Window이므로 아래와 같은 명령어를 사용했습니다.
# chocolatey 설치
Set-ExecutionPolicy Bypass -Scope Process -Force; [System.Net.ServicePointManager]::SecurityProtocol = [System.Net.ServicePointManager]::SecurityProtocol -bor 3072; iex ((New-Object System.Net.WebClient).DownloadString('https://chocolatey.org/install.ps1'))
# eksctl 설치
choco install eksctl
# IAM 정책 파일 다운로드
Invoke-WebRequest -Uri "https://raw.githubusercontent.com/kubernetes-sigs/aws-load-balancer-controller/v2.5.4/docs/install/iam_policy.json" -OutFile "iam_policy.json"
# IAM 정책 생성
aws iam create-policy --policy-name sqcElb --policy-document file://iam_policy.json
eksctl create iamserviceaccount `
--cluster=[Cluster Name]`
--namespace=kube-system `
--name=aws-load-balancer-controller `
--role-name AmazonEKSLoadBalancerControllerRole `
--attach-policy-arn=arn:aws:iam::[userId]:policy/sqcElb `
--approve
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
- 로드 밸런스 테스트를 위한 kubernates 파일 작성
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx
spec:
selector:
matchLabels:
run: nginx
replicas: 2
template:
metadata:
labels:
run: nginx
spec:
containers:
- name: nginx
image: nginx
ports:
- containerPort: 80
---
apiVersion: v1
kind: Service
metadata:
name: nginx
labels:
run: nginx
spec:
ports:
- port: 80
protocol: TCP
selector:
run: nginx
---
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: sqc-ingress
annotations:
alb.ingress.kubernetes.io/target-type: ip
alb.ingress.kubernetes.io/scheme: internet-facing
spec:
ingressClassName: alb
rules:
- host: sqcapp.com
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: nginx
port:
number: 80
- path: /api
pathType: Prefix
backend:
service:
name: sqc-backend-service
port:
number: 80
- path: /front
pathType: Prefix
backend:
service:
name: sqc-frontend-service
port:
number: 80
- Kubernates 파일 생성 시 자동으로 로드 밸런서가 생성됩니다. 아래의 이미지는 로드밸런서의 리스너 규칙과 조건이 만족할 경우 전달되는 대상 그룹에 대한 이미지입니다.
AWS Route 53에서 도메인 구입 후 반영
- nginx 서비스 실행 화면
참조
반응형