환경 구성 정보 및 내용

 

Grafana Version : 9.3.1

bitnami Keycloak Version : 20.0.2

 


상세 설정 내용

 

 

 

1. Create Realm 버튼을 사용하여 Relam 생성

  • relam 명 : grafana2

keycloak main

 

2. 생성된 relam 안에 Create client 를 사용하여 client 생성

  • Client Id : grafana2
  • Client authentication : ON
  • Authorization : OFF
  • Authentication flow : Standard flow ON, Direct access grants ON, Implicit flow ON, 나머지 OFF

Client 생성 설정 1
Clitnt 생성 설정 2

 

3. Client 세부 설정

  • Root URL : <grafana URL>
  • Valid redirect URLs : <grafana URL>/login/generic_oauth

 

Clitnt 세부 설정 1

 

 

4. 위 내용들을 저장 하면 Credentials Tab 이 생기는데 아래 Client secret 을 메모장에 저장 

Credentials -> Client secret key 확인 후 저장

 

5. Role 생성

  • role name : admin / editor
  • 아래 그림의 admin 설정 적용 후 editor 도 같은 방식으로 생성

Roles 생성

 

admin role 생성

 

 

6. admin role 생성 후 아래와 같이 설정 적용

  • 우측 상단에 Action 콤보박스에서 Add associated roles 적용
  • admin 에는 admin role 적용
  • editor 에는 editor role 적용

Add associated roles

Client role 로 생성한 admin 을 추가

아래 사진과 같이 필터항목 탭을 Filter by clients 로 변경 후 생성한 role 선택하여 추가

Assign roles to admin account 설정 적용

 

 

 

7. User 생성 

  • id : user-admin / user-editor
  • user-admin 생성 후 user-editor 도 같은 방식으로 생성 및 적용
  • email 은 아무내용이나 입력
  • Required user actions 설정을 통해 2차인증 적용 가능 

user 생성
user-admin 설정

 

 

8. user-admin Credentials 생성

  • password 변경
  • Temporary(비밀번호 변경 옵션) OFF

Credentials 생성
설정 화면

 

9. 생성된 user-admin 에 Role Mapping

  • Assign role 클릭
  • Assign roles to user-admin account 에서 Filter by Clients 클릭 후 admin 권한 추가

Role mapping 화면
Role mapping

 

 

 

10. Client Scope 설정

  • Clients - Client scopes - grafana2-dedicated 클릭
  • scope 탭에서 full scope allowed OFF 

Client scopes 설정 화면
Full scope allowed OFF

 

11. Mappers 설정

  • Configure a new mapper 추가
  • Mapper Type : User Client Role
  • Client ID : grafana2
  • Token Claim Name : roles
  • Claim JSON Type : String
  • Add to ID token : ON 
  • Add to access token : ON
  • Add to userinfo : ON

Configure a new mapper 설정

 

세부 설정 내용

 

 

12. Token 값 확인

  • 입력한 client id / client secret key / grafana url / relams 명을 사용하여 아래 명령어 입력 후 token 확인
curl -s \
-d "client_id=<client id>" \
-d "client_secret=<secret key>" \
-d "username=<ID>" \
-d "password=<Password>" \
-d "grant_type=password" \
"<grafana URL>/realms/<relams 명>/protocol/openid-connect/token"

 

 

13. Token decode

  • 12번에서 curl 을 입력 함으로써 나온 JSON 형식의 token 을 https://jwt.io/ 에서 decode 해서 내용 확인
  • decode 한 내용중 roles : admin 값이 있는지 확인

decode 상세 내용중 일부

14. 지금 까지 한 내용들을 바탕으로 user-editor 생성 후 role 매핑 진행 -> 10번 11번은 공통 내용이믈 제외하고 진행

 

15. grafana.ini 설정 변경

  • 아래 내용을 참고하여 설정한 값으로 입력
  • grafana 설치관련된 내용은 이전 게시글 확인
kubectl edit -n monitoring cm/grafana
apiVersion: v1
data:
  grafana.ini: |
    [analytics]
    check_for_updates = true
    [grafana_net]
    url = https://grafana.net
    [log]
    mode = console
    [paths]
    data = /var/lib/grafana/
    logs = /var/log/grafana
    plugins = /var/lib/grafana/plugins
    provisioning = /etc/grafana/provisioning
    [server]
    domain = <grafana url>
    root_url = <grafana url>
    [auth.generic_oauth]
    enabled = true
    name = Keycloak-OAuth
    allow_sign_up = true
    client_id = <client id>
    client_secret = <secret key>
    scopes = profile openid
    auth_url = <grafana url>/realms/<realm name>/protocol/openid-connect/auth
    token_url = <grafana url>/realms/<realm name>/protocol/openid-connect/token
    api_url = <grafana url>/realms/<realm name>/protocol/openid-connect/userinfo
    role_attribute_path = contains(roles[*], 'admin') && 'Admin' || contains(roles[*], 'editor') && 'Editor' || 'Viewer'
    tls_skip_verify_insecure = true
    [auth]
    disable_login_form: false
    oauth_auto_login: false
    [security]
    allow_embedding: true
    cookie_secure: false
    cookie_samesite: lax

 

 

16. Configmap 수정후 pod 재배포를 위해 grafana pod 삭제

  • grafana 를 pod를 삭제할 경우 deploy 에 의해서 pod가 재배포됨
  • 재배포시 15번에서 수정한 Configmap 부분이 수정되어 배포가됨
kubectl delete -n monitoring po/<GRAFANA pod 명>

 

 

17. 접속 확인

  • Grafana 계정을 사용한 login이 아닌 keycloak login 사용
  • keycloak 에서 생성한 user id/pw 로 접속
  • 접속 후 생성한 role 권한이 적용 되었는지 확인

Grafana Main
Grafana 에서 keycloak 으로 login 화면 전환
user-admin 으로 접속 하였을 경우 권한
user-editor 로 접속 하였을 경우 권한

 


 

Grafana 를 helm chart 를 사용하여 설치하면 편리하게 배포할 수 있다

 


 

helm chart 를 사용하여 Grafana 설치를 진행 하겠습니다.

 

1. Grafana 를 설치/사용할 namespace 를 먼저 생성

    → monitoring 이아닌 다른 namespace 도 사용 가능하다 default 로 monitoring 을 주로 사용

kubectl create ns monitoring

 

 

2. Grafana 를 다운받아올 helm repo를 추가 

    → Grafana 공식 github를 사용 

helm repo add grafana https://grafana.github.io/helm-charts

 

 

3. 추가한 repo 의 chart 를 다운로드 

helm pull grafana https://grafana.github.io/helm-charts

 

 

4. 다운로드된 chart 압축해제

tar -xvf grafana-6.60.1.tgz

 

 

 

5. grafana 폴더 안의 value.yaml 파일 수정

######## 접속을 위한 nodeport 로 변경
 185 service:
 186   enabled: true
 187   type: NodePort
 188   port: 8080
 189   targetPort: 3000
 190     # targetPort: 4181 To be used with a proxy extraContainer
 191   ## Service annotations. Can be templated.
 192   annotations: {}
 193   labels: {}
 194   portName: service
 195   # Adds the appProtocol field to the service. This allows to work with istio protocol selection. Ex: "http" or "tcp"
 196   appProtocol: ""
 197

######### admin 계정 설정 부분
 387 # Administrator credentials when not using an existing secret (see below)
 388 adminUser: admin
 389 adminPassword: admin

########## persistence 부분인데 지속적으로 grafana 를 사용할 거라면 pvc 를 사용으로 변경
 325 persistence:
 326   type: pvc
 327   enabled: false
 328   storageClassName: default
 329   accessModes:
 330     - ReadWriteOnce
 331   size: 10Gi
 332   # annotations: {}
 333   finalizers:
 334     - kubernetes.io/pvc-protection

 

 

6. helm chart 배포 

helm install grafana -f values.yaml -n monitoring ./

 

 

 

7. Grafana 접속

    → 초기 ID : admin

    → 초기 PW : 아래 있는 코드블록 내용으로 확인

kubectl get secret --namespace monitoring grafana -o jsonpath="{.data.admin-password}" | base64 --decode ; echo
#접속주소 => 'NodeIP:Port'
#위 사진에 있는 ClusterIP는 Cluster 내부의 IP이기 때문에 local desktop 에서 접속시에는 사용불가
#따라서 Grafana 를 설치한 Cluster Node 의 IP 및 위 사진에 있는 Port 정보로 로그인 해야함
#ex) http://10.0.2.10:32583

 

※ 주의사항

위 Grafana 는 helm chart 를 사용해서 기본 설정으로 배포한 것으로 사용 목적에 맞게 세부사항을 수정할 수 있습니다.

대표적으로 설정할 부분은 아래와 같습니다.

 

1. PVC 사용으로 설정하여 Grafana 의 데이터 유지

2. RDS를 연동하여 사용 가능

3. SSL 설정 가능

4. NodePort 뿐아니라 LB 를 사용하여 운영 가능

kubectl get cm/grafana -n monitoring
# configmap 에서 여러 내용을 수정 할 수 있으며 자세한 내용은 grafana 공식 홈피에지에 상세하게 적혀 있습니다.

 

 

 

 

 

 

AWS 에서 제공하는 각 서비스에는 네트워크 대역폭이 존재한다.

 
아래 사진을 보면 일반적인 교육용으로 많이 사용하는 t3.micro는 네트워크 성능이 최대 5Gbps 인것을 알 수있다.
 
 
여기서 중요한 부분이 '최대' 5Gbps이다.
AWS 에서 말하는 최대의 기준은 크레딧을 사용하여 버스트를 활성화 했을때 이야기이다. 
따라서 일반적으로 사용자가 적용받는 네트워크 성능은 아래 첨부된 사진과 같다.
 
추가적인 크레딧 사용이 없는 사용자가 t3.micro 인스턴스를 생성해서 사용할 경우 네트워크 대역폭은 0.064Gbps = 8MB 와 같다.
 
실제로 AWS 를 사용하다 보면 인스턴스 생성시 네트워크 대역폭은 버스트시 사용 가능한 대역폭으로 나타나 있어서 리소스가 부족한 현상들을 자주 접할 수 있다.
 
위 글을 참고 해서 기준 네트워크 대역폭을 고려해서 인스턴스 생성을 하시기 바랍니다
 
 
관련자료

'AWS' 카테고리의 다른 글

EKS 최초 생성 권한 문제  (0) 2023.04.16
AWS LB Annotations  (0) 2023.01.23
EventBridge 를 사용한 알람 발송  (0) 2023.01.20
AWS EKS nodegroup 생성 시 필요 조건  (0) 2023.01.20
AWS Certification 종류  (0) 2022.10.30

AWS 자격증 종류

  1. 기초
    • 클라우드에 관한 개념을 배우고자 하는 단계
    • 일반적으로  AWS 사용 1년 미만 경험에 대한 자격 검증
    • 약 7일 정도 공부로 취득 가능[개인적인 생각]
  2.     어소시에이트
    • 아키텍트 설계, 클라우드 운영, 개발자 영역으로 나뉜 클라우드의 개념을 익히고 주된 스킬을 익히는 단계
    • 일반적으로 AWS 사용 1~2년 경험에 대한 자격 검증
    • 약 3주 정도 공부로 취득 가능[개인적인 생각]
  3. 프로페셔널
    • 어소시에이트의 기술을 토대로 AWS 서비스를 응용 할 수 있는 수준
    • 일반적으로 AWS 사용 3~5년 경험에 대한 자격 검증
    • 약 2달 정도 공부로 취득 가능[개인적인 생각]
  4. 전문분야
    • 네트워크, 데이터, 보안 등 한가지 분야에 대한 고급 기술을 가진 사람에 대한 자격 검증
    • 일반적으로 AWS 사용 5년 이상에 대한 자격 검증
    • 시험 난이도가 상당히 높은걸로 알고 있음

준비과정

 

AWS는 Azure, GCP 등과 더불어 해외 클라우드 시장의 대부분의 점유율을 차지하고 있는 만큼 AWS에서 자체적으로 운영하는 교육 공간도 있고, 관련 자료 또한 많이 있다. 이 중 제가 공부한 내용을 토대로 몇 가지 사이트를 알려 드리겠습니다.

  1. Udemy
    • AWS 뿐만 아니라 다양한 학습자료가 많은 사이트로, 한 달에 두 번 정도 70% 이상 할인을 하기 때문에 할인할 때 학습자료를 사서 공부하는 걸 추천합니다. 아래에 있는 인프런/패스트캠퍼스보다는 저렴하지만 영어로 되어 있어 학습에 다소 어려움이 있을 수 있다. 
    • 기본적으로 영어 사이트이기 때문에, 강의를 사실 때 CC(자막) 이 있는 강의를 구매하셔서 강의를 보실대 대본보기를 사용해서 구글 자체 기능인 한국어로 번역을 해서 공부하시면 됩니다.
    • AWS 공부/자격증을 위한 강의가 있고, AWS 연습 시험(덤프) 문제도 학습할 수 있다. 
    • 시간을 들여서 AWS 공부를 하고 싶다면 AWS Hands-on 또는 AWS 강의 영상을 보면 되고, 시간이 없고 빠르게 자격증을 취득하고 싶다면 AWS 연습 시험(덤프)을 통해 답만 빠르게 외워서 하는 방법이 있다.
  2. 인프런
    • 한국어로 된 사이트로 개발자를 위한 교육이 다수 있는 사이트이다. 강의 검색으로 AWS 검색해 보시면 자격증에 대한 강의보다는, AWS 사용에 대한 기본적인 강의부터 개발에 이르기까지 다양한 강의를 볼 수 있다. 
  3. 패스트캠퍼스
    • 인프런이 개발에 대한 다수의 교육이 주를 이루고 있다면, 패스트캠퍼스는 다양한 주제에 맞는 강의가 존재한다. 설계, 개발, 네트워크, DevOps 등 다양한 주제에 대한 강의가 많으나 다소 비싸다는 단점이 있다. 하지만 교육에 대한  퀄리티가 제일 좋은 느낌을 준다.

 

'AWS' 카테고리의 다른 글

EKS 최초 생성 권한 문제  (0) 2023.04.16
AWS LB Annotations  (0) 2023.01.23
EventBridge 를 사용한 알람 발송  (0) 2023.01.20
AWS EKS nodegroup 생성 시 필요 조건  (0) 2023.01.20
AWS Instance Network Bandwidth  (0) 2022.10.30

+ Recent posts