1. 일단 콘솔에서 클러스터 생성
일단 권한은 아래와 같이 줬고, eksctl 에러나서 콘솔에서 광클해서 생성함
클러스터 권한은 아래와 같고
워커노드 권한은 아래와 같다.
권한을 위와 같이 주고 클러스터를 생성한다.
2. ALB 설정
- 자격증명 만들기
- 기본 명령어
eksctl utils associate-iam-oidc-provider \
--region <region-code> \
--cluster <your-cluster-name> \
--approve
- 적용 명령어 (예시) - 만약 ALB롤이 생성이 되어있고 클러스터만 추가로 생성 했다면 아래의 명령어에서 클러스터 이름만 변경 후 적용하면 된다.
eksctl utils associate-iam-oidc-provider \
--region ap-northeast-2 \
--cluster EKS-CLUSTER-NAME \
--approve
- ALB에 대한 정책 생성
curl -O https://raw.githubusercontent.com/kubernetes-sigs/aws-load-balancer-controller/v2.5.4/docs/install/iam_policy.json
curl -o iam-policy.json https://raw.githubusercontent.com/kubernetes-sigs/aws-load-balancer-controller/v2.2.1/docs/install/iam_policy.json
- 위에서 받은 json 파일을 이용하여 아래의 명령어를 실행
aws iam create-policy \
--policy-name AWSLoadBalancerControllerIAMPolicy \
--policy-document file://iam-policy.json
- 이미 존재하는 정책이라고 나오는 경우 아래와 같이 정책을 연결만 해주자.
아래는 예시이다.
aws iam attach-role-policy \
--role-name <WorkerNoderole-이름> \
--policy-arn arn:aws:iam::<계정번호>:policy/AWSLoadBalancerControllerIAMPolicy
aws iam attach-role-policy \
--role-name eks-worker-role \
--policy-arn arn:aws:iam::11111111111:policy/AWSLoadBalancerControllerIAMPolicy
3. 클러스터에 대한 서비스 어카운트 생성
- 기본 명령어
eksctl create iamserviceaccount \
--cluster=<cluster-name> \
--namespace=kube-system \
--name=aws-load-balancer-controller \
--attach-policy-arn=arn:aws:iam::<AWS_ACCOUNT_ID>:policy/AWSLoadBalancerControllerIAMPolicy \
--override-existing-serviceaccounts \
--approve
- 적용 명령어 (예시)
eksctl create iamserviceaccount \
--cluster=EKS-CLUSTER-NAME \
--namespace=kube-system \
--name=aws-load-balancer-controller \
--attach-policy-arn=arn:aws:iam::111111111111:policy/AWSLoadBalancerControllerIAMPolicy \
--override-existing-serviceaccounts \
--approve
- 다운로드
kubectl apply \
--validate=false \
-f https://github.com/jetstack/cert-manager/releases/download/v1.13.3/cert-manager.yaml
- 다운로드
curl -Lo v2_5_4_full.yaml https://github.com/kubernetes-sigs/aws-load-balancer-controller/releases/download/v2.5.4/v2_5_4_full.yaml
- 위의 파일을 다운 받은 후 vi나 vim 으로 v2_5_4_full.yaml 파일을 오픈한다.
- set nu 를 아래와 같이 입력하여 각 줄의 번호를 표시 한다.
- /cluster-name 을 입력하고, 아래와 같이 변경을 한다.
- 아래내용 참고
# cluster-name의 부분을 반드시 생성한 클러스터의 이름으로 변경 합니다.
apiVersion: apps/v1
kind: Deployment
. . .
name: aws-load-balancer-controller
namespace: kube-system
spec:
. . .
template:
spec:
containers:
- args:
- --cluster-name=<INSERT_CLUSTER_NAME> # 798번째 줄
# 우리는 이전의 서비스 어카운트를 미리 생성했으므로 파일의 끝부분으로 이동하여 kind:ServiceAccount 부분을 모두 삭제 합니다.
# 547번째 줄
apiVersion: v1
kind: ServiceAccount
- 이제 ALB 컨트롤러를 설치 한다.
kubectl apply -f v2_5_4_full.yaml
* 주의 사항 : cert-manager 관련 오브젝트들이 전부 설치가 된 후 ALB 컨트롤러를 실행해야 한다.
여기까지 수행하면 k8s 클러스터에 ingress를 위한 ALB Controller가 설치 되었다.
4. nginx 서비스 배포하여 ALB 적용 확인 하기
deployment → service → ingress 순으로 실행한다. 각 단계별로 정상적으로 실행 되었는지 확인하고 진행 한다.
- deployment
파일명: nginx-deployment.yaml
파일 내용 (예시)
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx
namespace: nginx
labels:
app: nginx
spec:
replicas: 8
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx:1.14.2
ports:
- containerPort: 80
- service
파일명: nginx-service.yaml
파일 내용 (예시)
apiVersion: v1
kind: Service
metadata:
name: nginx-service
namespace: nginx
annotations:
alb.ingress.kubernetes.io/healthcheck-path: "/healthy"
spec:
selector:
app: nginx
type: NodePort
ports:
- port: 8080
protocol: TCP
targetPort: 80
- ingress
파일명: nginx-ingress.yaml
파일 내용 (예시)
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: nginx-ingress
namespace: nginx
annotations:
kubernetes.io/ingress.class: alb
alb.ingress.kubernetes.io/scheme: internet-facing
alb.ingress.kubernetes.io/target-type: instance
spec:
rules:
- http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: "nginx-service"
port:
number: 8080
4. 생성된 서비스 확인
kubectl describe ingress nginx-ingress
- Address에 나와있는 주소가 실제 접속하는 주소라고 보면 된다.
- Address 주소를 복사하여 웹페이지에 붙여넣으면, 아래와 같이 nginx 화면을 볼 수 있다.
5. AWS 로드밸런서가 확인
AWS에서 ALB가 자동으로 생성되었나 확인한다.
리스너는 아래와 같이 고정 응답 반환 404를 하도록 구성 되어 있다.
버전마다 달라지네 휴
- 끝 -
'⌛ AWS 인프라 구성하기 (MiniProject) > ✅ 개발환경 구성 (EKS)' 카테고리의 다른 글
eksctl 설치하기 (0) | 2024.02.15 |
---|---|
CLB(Classic LoadBalancer) (0) | 2022.06.27 |
실행중인 pod로 접근 및 연결 확인하기 (pod ping test) (0) | 2022.06.08 |
Container 통신 환경을 제공하기 위한 calico 설치하기 (0) | 2022.05.31 |
EKS 기반 모니터링 서비스 환경 구성 (프로메테우스 & 그라파나) (0) | 2022.05.26 |