일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |
- 깃허브 액션
- helm
- grafana on kubernetes
- jenkins
- Prometheus install
- EFS CSI Driver
- github action 사용법
- Kubernetes
- Aurora cluster
- AWS 딥레이서
- LoadBalancer Controller
- 메탈LB
- 쿠버네티스 컴포넌트
- terraform
- 그라파나 시각화
- 솔데스크
- livenessPorbe
- headless service
- 쿠버네티스
- 그라파나 대시보드
- Kubernets on Jenkins
- 딥레이서 보상함수
- 딥레이서
- 로드밸런서 컨트롤러
- blue-green
- kubernetes 동작 원리
- SAA 합격 후기
- Solution Architecture
- EKS 클러스터
- Firelens
mingming
EKS AWS Load Balancer Controller (helm) 본문
AWS Load Balancer Controller
Kubernetes Ingress 오브젝트를 트리거로 ALB를 동적으로 관리해주는 컨트롤러 입니다. 이전 이름은 AWS ALB Ingress Controller로 Github에서 관리되는 오픈소스 프로젝트 입니다.
EKS Cluster provisioning
eksctl 명령어를 통해 eks cluster를 생성해줍니다.
프로비저닝 될 때까지 10~15 분 정도 걸립니다.
eksctl create cluster --name <cluster_name> --version 1.24 \
--region ap-northeast-2 \
--nodegroup-name linux-noded \
--nodes 2 --nodes-min 1 --nodes-max 4 \
--ssh-access --ssh-public-key <Key_name> --node-type t3.small --managed
IAM Policy 생성
https://docs.aws.amazon.com/eks/latest/userguide/aws-load-balancer-controller.html
해당 페이지를 참고해 정책을 다운로드 합니다.
curl -O https://raw.githubusercontent.com/kubernetes-sigs/aws-load-balancer-controller/v2.4.7/docs/install/iam_policy.json
다운받은 정책으로 Iam 정책을 생성해줍니다.
aws iam create-policy \
--policy-name AWSLoadBalancerControllerIAMPolicy \
--policy-document file://iam_policy.json
Service Account 생성 및 정책 연결
IAM OIDC Provider 매핑
eksctl utils associate-iam-oidc-provider --cluster <cluster_name> --approve
ServiceAccount
eksctl create iamserviceaccount \
--cluster=<cluster_name> \
--namespace=kube-system \
--name=aws-load-balancer-controller \
--attach-policy-arn=arn:aws:iam::<Account_ID>:policy/AWSLoadBalancerControllerIAMPolicy \
--override-existing-serviceaccounts \
--approve
AWS Laod Balancer Controller 설치
helm 설치하기
curl -fsSL -o get_helm.sh https://raw.githubusercontent.com/helm/helm/main/scripts/get-helm-3
chmod 700 get_helm.sh
./get_helm.sh
helm repo 추가하기
helm repo add eks https://aws.github.io/eks-charts
helm repo update
helm search repo eks
컨트롤러 설치하기
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 region=ap-northeast-2 \
ServiceAccount는 미리 생성했기 때문에 false로 해줍니다.
컨트롤러가 정상적으로 작동하는 것을 확인하실 수 있습니다.
Sample Service, Ingress , Deployment
Service.yaml
apiVersion: v1
kind: Service
metadata:
name: nginx-service
annotations:
alb.ingress.kubernetes.io/healthcheck-path: "/"
spec:
type: NodePort
selector:
app: nginx
ports:
- port: 80
targetPort: 80
protocol: TCP
Deployments.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-deployment
spec:
replicas: 3
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx:latest
ports:
- containerPort: 80
Ingress.yaml
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: "nginx-ingress"
namespace: default
annotations:
kubernetes.io/ingress.class: alb
alb.ingress.kubernetes.io/scheme: internet-facing
alb.ingress.kubernetes.io/target-type: ip
alb.ingress.kubernetes.io/group.name: nginx
alb.ingress.kubernetes.io/group.order: '1'
spec:
rules:
- http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: "nginx-service"
port:
number: 80
작성한 매니페스트 파일을 배포해줍니다.
kubectl apply -f Service.yaml
kubectl apply -f Deployments.yaml
kubectl apply -f Ingress.yaml
로드밸런서가 프로비저닝 되고, 외부 아이피가 할당된 것을 확인하실 수 있습니다.
로드밸런서는 Ingress 배포 후 프로비저닝 됩니다.
NodePort 타입의 서비스와 Ingress를 통해 LoadBalncer를 생성하여 외부에서 접근 가능하도록 설정했습니다.
생성한 오브젝트 삭제
kubectl delete -f Service.yaml
kubectl delete -f Deployments.yaml
kubectl delete -f Ingress.yaml
클러스터 삭제
eksctl delete -f cluster --name <cluster_name> --region ap-northeast-2
'kubernetes' 카테고리의 다른 글
kubernetes livenessProve (1) | 2023.08.27 |
---|---|
EKS Amazon EFS CSI Driver (helm) (1) | 2023.08.25 |
Kubernetes 컴포넌트 (0) | 2023.08.14 |
kubernetes 동작원리 (1) | 2023.08.13 |
kubernetes 연습장 (0) | 2023.08.13 |