Redis

Redis Insight Kubernetes 배포

김 정출 2024. 8. 18. 13:58

Redis Insight Kubernetes 배포

지난 포스트 에서 Redis Cluster를 배포하였습니다.

https://jeongchul.tistory.com/725

 

Kubernetes Redis Cluster 설치

Redis Cluster는 master를 여러 개 두어 분산 저장(sharding)이 가능하며, Scale-out이 가능합니다.최소 3개의 Master Node가 있어야 구성 가능하며, Sentinel 과 달리 모든 node가 서로 감시하며 failover를 조치합니

jeongchul.tistory.com

이번 포스트에서는 위에서 배포한 Redis Cluster와 연동된 Redis Insight를 배포하겠습니다.

Kubernetes 배포

저는 도메인을 등록하여 사용할 예정이라 Certificate, Gateway 설정을 해두었습니다.
다음의 내용을 참고해주세요!
https://jeongchul.tistory.com/721

 

Cert Manager with SSL Domain with AWS Route53

Cert Manager with SSL Domain with AWS Route53지난번 글에서 Istio를 구축하였습니다.https://jeongchul.tistory.com/720금번 글에서는 AWS Route53을 통해 할당받은 도메인을 SSL 인증서를 Cert Manager와 Let's Encrypt를 통해

jeongchul.tistory.com

 

 

VirtualService

apiVersion: networking.istio.io/v1beta1
kind: VirtualService
metadata:
  name: vs-redis-insight
  namespace: redis
spec:
  gateways:
  - default/cluster-gateway 
  hosts:
  - [YOUR_DOMAIN]
  http:
  - corsPolicy:
      allowHeaders:
      - authorization
      - content-Type
      - accept
      allowMethods:
      - POST
      - GET
      - DELETE
      - PUT
      - OPTIONS
      allowOrigins:
      - regex: .*
      exposeHeaders:
      - authorization
      - location
      maxAge: 24h
    match:
    - uri:
        prefix: /
    route:
    - destination:
        host: redisinsight-service.redis.svc.cluster.local
        port:
          number: 80

위의 VirtualService를 배포합니다.

kubectl apply -f virtualservice.yaml

Service

apiVersion: v1
kind: Service
metadata:
  labels:
    app: redisinsight
  name: redisinsight-service
  namespace: redis
spec:
  ports:
    - appProtocol: http
      port: 80
      targetPort: 5540
  selector:
    app: redisinsight

위의 Service를 배포합니다.

kubectl apply -f service.yaml

PV

apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: redisinsight-pv-claim
  namespace: redis
  labels:
    app: redisinsight
spec:
  accessModes:
    - ReadWriteOnce
  resources:
    requests:
      storage: 2Gi
  storageClassName: nfs
  volumeMode: Filesystem

위의 PVC를 배포합니다.

kubectl apply -f pvc.yaml

Deployment

apiVersion: apps/v1
kind: Deployment
metadata:
  name: redisinsight
  namespace: redis
  labels:
    app: redisinsight
spec:
  replicas: 1
  strategy:
    type: Recreate
  selector:
    matchLabels:
      app: redisinsight
  template:
    metadata:
      labels:
        app: redisinsight
    spec:
      volumes:
        - name: redisinsight
          persistentVolumeClaim:
            claimName: redisinsight-pv-claim
      initContainers:
        - name: init
          image: busybox
          command:
            - /bin/sh
            - '-c'
            - |
              chown -R 1000 /data              
          resources: {}
          volumeMounts:
            - name: redisinsight
              mountPath: /data
          terminationMessagePath: /dev/termination-log
          terminationMessagePolicy: File
      containers:
        - name:  redisinsight
          image: redis/redisinsight:latest
          imagePullPolicy: IfNotPresent
          volumeMounts:
          - name: redisinsight
            mountPath: /data
          ports:
          - containerPort: 5540
            protocol: TCP

위의 Deployment를 배포합니다.

kubectl apply -f deployment.yaml


도메인을 설정하셨거나 NodePort 주소로 웹 브라우저에서 이동합니다.

다음을 동의합니다.

  • Enable Analytics
  • Show notification
  • I have read and understood the Terms

초기에 Redis database를 등록해야 합니다.

다음을 입력합니다.

  • Host: redis-cluster-headless.redis.svc.cluster.local
  • Port: 6379
  • Database Alias: Redis Cluster

연결이 되었습니다.

Browser로 이동하면 Key를 확인할 수 있습니다.

Analysis Tool을 이용하면 Cluster의 세부정보를 확인할 수 있습니다.

Redis Insight의 경우 보안을 위한 ID/Password의 secure 설정이 불가하여 누구든 접속 가능하다는 문제가 있습니다..
다음을 참고하면 Nginx를 배포하여 ID/Password를 입력해 접근 시에 브라우저 상에서 패스워드를 입력하도록 가능하게 할 수 있습니다. 
https://github.com/RedisInsight/RedisInsight-reverse-proxy 

읽어주셔서 감사합니다!