프론트엔드에서 백엔드로 데이터를 요청할 때는 서비스의 엔드포인트 주소로 요청을 보낼 수 있게 설정한다
단일 클러스터 설정의 경우 서비스의 엔드포인트는 다음과 같다
http://[Service].[Namespace].svc.cluster.local:[Port]
kubectl create namespace web
# create-front-pod.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: web
namespace: web
spec:
selector:
matchLabels:
# 아래 template.metadata.labels의 key, value와 통일시켜준다
type: web
replicas: 4
strategy:
type: RollingUpdate
minReadySeconds: 10
template:
metadata:
labels:
type: web
spec:
containers:
- name: frontend
# 아래 주소는 백엔드 디플로이먼트 생성할 때와 같이, ECR에서 사용할 이미지의 URI를 입력한다
image: 673489540568.dkr.ecr.ap-northeast-2.amazonaws.com/web:23
ports:
# 웹서버의 기본 포트인 80번을 listening한다
- containerPort: 80
terminationGracePeriodSeconds: 3
kubectl apply -f create-front-pod.yaml
kubectl exec -it [파드 이름] -n web -- /bin/bash
curl http://svc-back.app.svc.cluster.local:8000/postings/feed/public
# create-front-svc.yaml
apiVersion: v1
kind: Service
metadata:
name: svc-web
namespace: web
spec:
selector:
type: web
ports:
- protocol: TCP
port: 80
targetPort: 80
kubectl apply -f create-front-svc.yaml
Public Subnet | Private Subnet | |
---|---|---|
키 | kubernetes.io/role/elb | kubernetes.io/role/internal-elb |
값 | 1 | 1 |
--- | Security Group |
---|---|
키 | kubernetes.io/cluster/[EKS Cluster Name] |
값 | shared 또는 owned |
이후, 인그레스를 생성할 yaml 파일을 작성한다
# ingress.yaml
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: ingress-web
namespace: web
annotations:
alb.ingress.kubernetes.io/scheme: internet-facing
alb.ingress.kubernetes.io/target-type: ip
spec:
ingressClassName: alb
rules:
- http:
paths:
- pathType: Prefix
path: /
backend:
service:
name: svc-web
port:
number: 80
kubectl apply -f ingress.yaml
만약, 정상적으로 ingress가 생성됐다면, 아래와 같이 ALB가 생성되어야 한다
ALB의 DNS로 접속했을 때, 웹서버가 정상적으로 동작하는지 확인
여기서 이름이 다를 것이다. 왜냐하면 나는 이파일들을 전부 helm으로 묶어서 진행했다. 이건 CICD 부분에서 확인바람!