Infra/Kubernetes & EKS

AWS EKS 그라파나(Grafana) 접속 세팅 방법

jimmy_AI 2023. 11. 21. 23:02
반응형

AWS EKS에서 그라파나 사이트를 띄울 수 있는 pod를 띄우고

사이트에 접속할 수 있도록 설정하는 방법에 대하여

간략하게 정리해보도록 하겠습니다.

 

 

Step 1. 그라파나 도커 이미지 다운로드 및 ECR에 업로드

로컬 시스템에 Docker가 설치되어 있다고 가정하겠습니다.

 

먼저, Grafana 공식 도커 이미지를 다운로드해야 하는데, 다음 명령어로 쉽게 가능합니다.

docker pull grafana/grafana

 

해당 로컬 환경에서 AWS 인증을 하고, ECR 레포지터리를 생성합니다.

(여기서는 grafana-repo라는 이름의 레포지터리를 가정하겠습니다.)

aws ecr create-repository --repository-name grafana-repo

 

이제 도커 이미지 태깅 및 push를 진행해줍니다. [ECR 레포지터리 URI]가 필요합니다.

docker tag grafana/grafana:latest [ECR 리포지토리 URI]:latest

docker push [ECR 리포지토리 URI]:latest

 

 

Step 2. Grafana Deployment yaml 파일 적용 및 pod 생성

이제 앞 과정에서 push한 ECR 이미지를 통하여 pod를 먼저 띄워야 합니다.

이를 위해서는 Deployment 종류의 yaml 파일이 필요한데, 작성 예시는 다음과 같습니다.

apiVersion: apps/v1
kind: Deployment
metadata:
  labels:
    app: grafana
  name: grafana
  namespace: grafana
spec:
  replicas: 1
  selector:
    matchLabels:
      app: grafana
  template:
    metadata:
      labels:
        app: grafana
    spec:
      containers:
      - name: grafana
        image: [ECR 리포지토리 URI]:latest
        ports:
        - containerPort: 3000

이후, kubectl apply -f [파일명].yaml 명령어를 입력해주시면

그라파나 pod를 띄우는 작업이 완료됩니다.

 

반응형

 

Step 3. Kubernetes Service yaml 파일 적용

이제 실제로 url을 통하여 그라파나에 접속하기 위해서는 추가 작업이 필요합니다.

바로 쿠버네티스 서비스ingress 설정을 위한 yaml 파일 적용이 필요한 것인데요.

 

우선, 쿠버네티스 서비스를 위한 Loadbalancer yaml 파일 예시는 다음과 같습니다.

apiVersion: v1
kind: Service
metadata:
  name: grafana-service
  namespace: grafana
spec:
  ports:
    - protocol: TCP
      port: 80
      targetPort: 3000
  selector:
    app: grafana

selector의 app 이름이 Step 2에서 지정했던 pod의 이름과 맞춰주어야 합니다.

 

작성 이후에는 해당 파일도 kubectl apply -f [파일명].yaml 명령어로

적용을 시켜주시면 됩니다.

 

 

Step 4. Ingress yaml 파일 적용

이제 AWS ALB에서 특정 url을 타고 그라파나 사이트에 접속이 가능하게 하도록

ingress 설정 yaml 파일을 작성해보도록 하겠습니다.

 

yaml 파일 예시 스니펫은 다음과 같습니다.

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  annotations:
    alb.ingress.kubernetes.io/scheme: internet-facing
    alb.ingress.kubernetes.io/target-type: ip
    alb.ingress.kubernetes.io/group.name: grafana
    alb.ingress.kubernetes.io/group.order: '1'
    alb.ingress.kubernetes.io/listen-ports: '[{"HTTP": 80}]'
    alb.ingress.kubernetes.io/security-groups: [보안그룹 번호]
    alb.ingress.kubernetes.io/manage-backend-security-group-rules: "true"
  name: grafana-ingress
  namespace: grafana
spec:
  ingressClassName: alb
  rules:
   - http:
      paths:
      - backend:
          service:
            name: grafana-service
            port:
              number: 3000
        path: /
        pathType: Prefix

여기서 가장 아래의 service: name 부분은 Step 3에서 작성했던 서비스의 이름과

일치시키는 것이 중요합니다.(grafana-service로 일치합니다.)

 

이 파일 역시 kubectl apply -f [파일명].yaml 명령어로 적용을 시켜주시면

그라파나 접속 준비가 모두 완료됩니다.

 

접속을 하기 위한 url은 kubectl get ingress -n [namespace] 명령어로 조회가 가능합니다.

(이 예제에서는 [namespace] 부분에 grafana가 들어가면 됩니다.)

 

사이트에 접속하면 초기 아이디와 패스워드는 모두 admin으로 설정되어 있으니,

비밀번호를 변경해서 사용하시길 바랍니다.

 

단, HTTPS 접속이나 원하는 도메인 주소로 접속하기 위해서는 다른 설정이 추가로 필요합니다.