
Redis 모니터링을 위한 UI 툴인 Redis Insight를 설치합니다.
저는 테스트이기 때문에 퍼블릭 이미지를 가져와서 작업했습니다.
그리고 IP는 0.0.0.0으로 설정하여 외부 어디에서건 접근 가능하도록 설정했습니다.
추후 고도화 시에 IP를 제한하는 작업을 하려 합니다.
# redis-insight-deployment.yaml
namespace: redis
name: redis-insight
labels:
app: redis-insight
spec:
replicas: 1
selector:
matchLabels:
app: redis-insight
template:
metadata:
labels:
app: redis-insight
spec:
containers:
- name: redis-insight
image: redislabs/redisinsight:latest
ports:
- containerPort: 5540
env:
- name: RI_APP_HOST
value: "0.0.0.0"
- name: RI_APP_PORT
value: "5540"
imagePullSecrets:
- name: regcred
---
apiVersion: v1
kind: Service
metadata:
name: redis-insight-service
namespace: redis
spec:
selector:
app: redis-insight
ports:
- protocol: TCP
port: 80
targetPort: 5540
type: ClusterIP
yaml 파일을 만들었으니 배포해야죠!
kubectl apply -f redis-insight-deployment.yaml
아래 이미지와 같이 redis Namespace 대상을 설치가 됐다면 redis-insight 설치는 완료되었습니다.

Redis Insight를 외부에서 접근하기 위해서는 Public한 자원에 올리던지, Ingress ALB를 통해 접근하던지 2가지의 방법이 있습니다. 저는 Private한 자원에 설치 했기 때문에 Ingress ALB를 통한 접근이 필요합니다.
저는 간단한 테스트를 위해 80포트로만 통신할 예정이라 80 포트를 사용하는 yaml 파일을 작성했습니다. ALB_DNS_Name에 EKS Ingress ALB의 DNS Name을 넣어줍니다.
# redis-insight-ingress.yaml
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
namespace: redis
name: redis-insight-ingress
annotations:
alb.ingress.kubernetes.io/scheme: internet-facing
alb.ingress.kubernetes.io/target-type: ip
alb.ingress.kubernetes.io/listen-ports: '[{"HTTP": 80}]'
spec:
rules:
- host: <ALB_DNS_Name>
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: redis-insight-service
port:
number: 5540
kubectl apply -f redis-insight-ingress.yaml
정상적으로 배포되었는지 확인하고 마무리합니다.
kubectl get ingress -n redis

ALB 도메인을 통해 Redis Insight 접속을 시도해봅니다.
아래 옵션을 선택하여 TG을 생성합니다.
Target IP를 연결할 때는 EKS의 노드가 아닌 POD의 IP를 연결해줘야합니다.
-o wide 명령어를 통해 POD IP를 알아냅니다. Register하면 끝!
kubectl get po -n redis -o wide

아래 이미지와 같이 특정 도메인을 붙여 복잡한 DNS Name으로 접근 하는 것이 아닌 지정한 도메인을 통한 접근이 되게 합니다.

완료!!! Redis-insight 도메인으로 접속 시에 정상 통신 되는 것을 확인 합니다.
제가 설치에 대한 부분만 넣고 ALB, EKS 방화벽에 대한 부분은 생략하였는데요.

포트별 흐름을 간단히 정리해봤습니다. 상세 내용은 아래 설명을 읽어주세요.
사용자 → ALB(80) → EKS (5540) → Kafka (5540)
사용자 (80)
사용자가 웹 브라우저나 HTTP 클라이언트를 통해 포트 80을 사용하여 접속합니다.
이때 사용자가 접속하는 도메인(예: redis-ui.example.com)을 통해 ALB로 요청이 전달됩니다.
ALB (80)
ALB(AWS Application Load Balancer)는 외부에서 들어오는 트래픽을 받아서, 내부 EKS 클러스터로 전달합니다.
ALB는 80번 포트로 요청을 받아서, EKS에 설정된 Ingress 리소스를 통해 redis-insight-service로 요청을 포워딩합니다.
EKS (5540)
EKS에서 Ingress Controller가 ALB로부터 받은 요청을 처리하고, 해당 요청을 redis-insight-service로 전달합니다. redis-insight-service는 내부에서 5540번 포트를 사용하고, ALB는 80번 포트로 외부와 통신하므로, ALB는 요청을 80번 포트로 받고, EKS의 서비스는 5540번 포트로 처리합니다.
RedisInsight Pod (5540)
redis-insight-service는 5540번 포트에서 Redis Insight UI를 제공하고 있습니다.
EKS에서 서비스가 해당 포트를 사용하여 Redis와 연결된 UI 서비스를 제공하고, 데이터를 처리합니다.