개발공부/CLOUD

컨테이너 플랫폼 클러스터 환경에서 RabbitMQ 구축

전시나 2023. 12. 26. 17:02

 

Container Platform cluster 환경에서 RabbitMQ를 구축해보기 전에 아래의 링크를 기반으로 정리한 것임을 밝힘

https://www.rabbitmq.com/kubernetes/operator/using-operator.html

https://www.rabbitmq.com/kubernetes/operator/operator-overview.html

 

RabbitMQ Kubernetes Operators: Cluster Operator and Message Topology Operator — RabbitMQ

RabbitMQ Kubernetes Operators: Cluster Operator and Message Topology Operator The RabbitMQ team develop and maintain two kubernetes operators: the RabbitMQ Cluster Kubernetes Operator and the RabbitMQ Messaging Topology Operator. The RabbitMQ Cluster Kuber

www.rabbitmq.com

 

우선 첫번째 링크에서

1. RabbitMQ Cluster Kubernetes Operator 사용 방법  

# 서비스 가용성 확인
kubectl get customresourcedefinitions.apiextensions.k8s.io

# Rabbitmqclusters.rabbitmq.com 목록에 있는지 확인
kubectl get customresourcedefinitions.apiextensions.k8s.io
# NAME                                   CREATED AT
# rabbitmqclusters.rabbitmq.com   2019-10-23T10:11:06Z

# RabbitMQ 인스턴스 생성
#/home/[usr]/cp-deployment/standalone/single_control_plane/rabbitMQ-cluster-resource
# 필자는 k-paas 구축환경에서 진행되는 상황이므로 rabbitMQ-cluster-resource폴더를 만들어 
# 그 안에 yaml 파일을 생성함
vi definition.yaml
[ definition.yaml 내용 ] 
apiVersion: rabbitmq.com/v1beta1
kind: RabbitmqCluster
metadata:
  name: definition   <--이름은 바꿔도될듯... 나중에 검색할때 참고할 수 있도록(근데 namespace명인지, pod명인지,node명인지 모름)

#다음을 실행하여 정의를 적용
kubectl apply -f definition.yaml

#다음을 실행하여 프로세스가 성공했는지 확인
kubectl get all -l app.kubernetes.io/name=definition

#성공 샘플
kubectl get all -l app.kubernetes.io/name=definition
# NAME                      READY   STATUS    RESTARTS   AGE
# pod/definition-server-0   1/1     Running   0          112s
#
# NAME                          TYPE        CLUSTER-IP       EXTERNAL-IP   PORT(S)                        AGE
# service/definition-nodes      ClusterIP   None             None        4369/TCP                       113s
# service/definition            ClusterIP   10.103.214.196   None        5672/TCP,15672/TCP,15692/TCP   113s

 

이렇게 해서 RabbitMQ를 설치하고 실행시킨 후 RabbitMQ Management로 RabbitMQ관리 및 모니터링이 가능하다.

 

2. RabbitMQ  관리UI 설치 - rabbitmq_management

# rabbitmq-plugins명령어를 사용하기 위해 설치
sudo apt install rabbitmq-server

# RabbitMQ 관리UI 연결을 위한 설치
sudo rabbitmq-plugins enable rabbitmq_management

 

설치가 완료되고 나면 

http://{master IP}:15672 로 관리UI 웹브라우저에 액세스할 수 있음

 

더 자세히 port가 연결된것을 확인하려면 아래의 명령어로 LISTEN되어있는 포트 확인 (LISTENING 아님)

netstat -an | grep LISTEN

 

3 .RabbitMQ  관리UI 웹브라우저 터널링하기

 

위에서 만들어진 주소로 웹브라우저를 확인하고 rabbitMQ의 최초 로그인 아이디인 guest/guest로 접속하면 아래와 같이 나올 것이다.

이렇게 로그인 거절되서 당황스러울 것이다.(나만)

그렇다면 putty 접속 IP load -> 아래 그림과 같이 터널링해준다.

 

하고 나서 open 하고 접속하면

http://{node-hostname}:15672 또는 http://localhost:15672 로 관리UI 웹브라우저에 액세스할 수 있음.

그러면 geust로 로그인도 가능함. 근데 putty창이 꺼지면 접속도 끊어져서 다시 접속이 안될테니 아예 user을 생성해버리자

 

3-1. rabbitMQ RabbitMQ  관리 웹브라우저에 유저 생성하기

# 유저 생성하기
rabbitmqctl add_user {userID} {userPW}

# 권한주기 (관리자)
rabbitmqctl set_user_tags {userID} administrator
<<
- set_user_tags 종류
  - administrator : 관리자
  - monitoring : 조회
  - policymaker
  - management
  - none
>>  
  
# consume, publich 등 할 수 있는 권한 부여
rabbitmqctl set_permissions -p / {userID} ".*" ".*" ".*"

# 위의 명령어가 안먹힌다면 root권한 실행일 수 있으므로 sudo를 붙여서 실행할것

 

http://{master IP}:15672 로 접속해서 내가 생성한 유저로 바로 접속해버리자

 

4 . kubectl용 krew 명령어 설치 & RabbitMQ  플러그인 설치

(이건 RabbitMQ설치와 별 상관이 없지만 krew명령어를 쓸수도 있으므로 기록용으로 남겨놈)

플러그인을 설치하기 전에 다음 도구가 설치되어 있는지 확인.

kubectl krew

없다면, krew를 설치해야하는데, 

 (
   set -x; cd "$(mktemp -d)" &&
   OS="$(uname | tr '[:upper:]' '[:lower:]')" &&
   ARCH="$(uname -m | sed -e 's/x86_64/amd64/' -e 's/\(arm\)\(64\)\?.*/\1\2/' -e 's/aarch64$/arm64/')" &&
   KREW="krew-${OS}_${ARCH}" &&
   curl -fsSLO "https://github.com/kubernetes-sigs/krew/releases/latest/download/${KREW}.tar.gz" &&
   tar zxvf "${KREW}.tar.gz" &&
   ./"${KREW}" install krew
 )

 명령어를 통해 설치한다. 

# 플러그인 설치완료 후 PATH를 추가해야 완성됨
 export PATH="${KREW_ROOT:-$HOME/.krew}/bin:$PATH"
 
# 정상적으로 설치되었는지 확인
 kubectl krew

 

krew가 설치되면 이제 플러그인을 설치할 수 있다.

# 플러그인 설치
 kubectl krew install rabbitmq
 
# 필자는 갑자기 tail?도 설치하라고 떠서 아래 명령어도 실행함
 kubectl krew install tail

 

 

5 . 이후, Spring Application과 RabbitMQ를 사용해 메세지 주고 받기

https://velog.io/@power0080/Message-QueueRabbitMQ%EB%A5%BC-%EC%82%AC%EC%9A%A9%ED%95%B4-%EB%A9%94%EC%84%B8%EC%A7%80-%EC%A3%BC%EA%B3%A0-%EB%B0%9B%EA%B8%B0

 

[Message Queue]RabbitMQ를 사용해 메세지 주고 받기

RabbitMQ를 통해 메세지를 송, 수신하는 2개의 서비스를 간단히 만들어봅시다.

velog.io

를 참고한 블로그 이다