OpenShift에 AMQ Broker 배포
AMQ Broker 7.12와 함께 사용하는 경우
초록
보다 포괄적 수용을 위한 오픈 소스 용어 교체
Red Hat은 코드, 문서, 웹 속성에서 문제가 있는 용어를 교체하기 위해 최선을 다하고 있습니다. 먼저 마스터(master), 슬레이브(slave), 블랙리스트(blacklist), 화이트리스트(whitelist) 등 네 가지 용어를 교체하고 있습니다. 이러한 변경 작업은 작업 범위가 크므로 향후 여러 릴리스에 걸쳐 점차 구현할 예정입니다. 자세한 내용은 CTO Chris Wright의 메시지를 참조하십시오.
1장. OpenShift Container Platform의 AMQ Broker 소개
Red Hat AMQ Broker 7.12는 OCP(OpenShift Container Platform) 4.13, 4.14, 4.15, 4.16 및 4.17에서 사용할 수 있는 컨테이너화된 이미지로 사용할 수 있습니다.
AMQ Broker는 Apache ActiveMQ Artemis를 기반으로 합니다. JMS와 호환되는 메시지 브로커를 제공합니다. 초기 브로커 Pod를 설정한 후 OpenShift Container Platform 기능을 사용하여 중복을 빠르게 배포할 수 있습니다.
1.1. 버전 호환성 및 지원
OpenShift Container Platform 이미지 버전 호환성에 대한 자세한 내용은 다음을 참조하십시오.
OpenShift Container Platform에 AMQ Broker의 모든 배포는 이제 RHEL 8 기반 이미지를 사용합니다.
1.2. 지원되지 않는 기능
외부 클라이언트는 AMQ Broker에서 제공하는 토폴로지 정보를 사용할 수 없습니다.
AMQ Core Protocol JMS Client 또는 AMQ JMS Client가 OpenShift Container Platform 클러스터의 브로커에 연결하는 경우 브로커는 현재 브로커에 대한 연결이 끊어진 경우 클라이언트의 장애 조치 목록 역할을 하는 클러스터의 다른 브로커 각각에 대한 IP 주소 및 포트 정보를 클라이언트에 보낼 수 있습니다.
각 브로커에 제공된 IP 주소는 OpenShift Container Platform 클러스터 외부에 있는 클라이언트에서 액세스할 수 없는 내부 IP 주소입니다. 외부 클라이언트가 내부 IP 주소를 사용하여 브로커에 연결하지 못하도록 하려면 클라이언트가 처음에 브로커에 연결하도록 사용하는 URI에서 다음 구성을 설정합니다.
클라이언트 설정 AMQ Core Protocol JMS Client
useTopologyForLoadBalancing=false
AMQ JMS Client
failover.amqpOpenServerListAction=IGNORE
1.3. 문서 규칙
이 문서에서는 sudo
명령, 파일 경로 및 교체 가능한 값에 대해 다음 규칙을 사용합니다.
sudo
명령
이 문서에서 sudo
는 root 권한이 필요한 모든 명령에 사용됩니다. sudo
를 사용할 때는 변경 사항이 전체 시스템에 영향을 미칠 수 있으므로 주의해야 합니다. sudo
사용에 대한 자세한 내용은 sudo 액세스 관리를 참조하십시오.
이 문서에서 파일 경로 사용 정보
이 문서에서 모든 파일 경로는 Linux, UNIX 및 유사한 운영 체제(예: /home/...
)에 유효합니다. Microsoft Windows를 사용하는 경우 동등한 Microsoft Windows 경로(예: C:\Users\...
)를 사용해야 합니다.
대체 가능한 값
이 문서에서는 사용자 환경과 관련된 값으로 교체해야 하는 교체 가능한 값을 사용하는 경우가 있습니다. 대체 가능한 값은 소문자로 묶고(< >)로 묶고 italics 및 monospace 글꼴
을
사용하여 스타일을 지정할 수 있습니다. 여러 단어가 밑줄(_
)으로 구분됩니다.
예를 들어 다음 명령에서 < project_name>
을 고유한 프로젝트 이름으로 바꿉니다.
$ oc new-project <project_name>
2장. OpenShift Container Platform에 AMQ Broker 배포 계획
이 섹션에서는 Operator 기반 배포를 계획하는 방법을 설명합니다.
Operator 는 OpenShift 애플리케이션을 패키지, 배포 및 관리할 수 있는 프로그램입니다. Operator는 종종 일반 또는 복잡한 작업을 자동화합니다. 일반적으로 Operator는 다음을 제공합니다.
- 일관되고 반복 가능한 설치
- 시스템 구성 요소의 상태 점검
- OTA(Over-the-air) 업데이트
- 관리형 업그레이드
Operator를 사용하면 브로커 인스턴스가 실행되는 동안 변경할 수 있습니다. 이는 항상 배포를 구성하는 데 사용한 사용자 정의 리소스(CR) 인스턴스의 변경을 수신 대기하기 때문입니다. CR을 변경하면 Operator는 기존 브로커 배포로 변경 사항을 조정하고 변경 사항을 반영하도록 배포를 업데이트합니다. 또한 Operator는 메시징 데이터의 무결성을 보장하는 메시지 마이그레이션 기능을 제공합니다. 배포의 의도적인 스케일 다운으로 인해 클러스터형 배포의 브로커가 종료되면 이 기능은 동일한 브로커 클러스터에서 계속 실행 중인 브로커 Pod로 메시지를 마이그레이션합니다.
2.1. HA(고가용성) 개요
고가용성 이란 시스템의 일부가 실패하거나 종료될 때에도 작동할 수 있는 시스템을 나타냅니다. OpenShift Container Platform의 AMQ Broker의 경우 Pod가 실행 중인 노드, Pod가 실행 중이거나 클러스터가 실패하는 경우 메시징 데이터의 무결성 및 가용성을 보장합니다.
AMQ Broker는 OpenShift Container Platform에 제공된 HA 기능을 사용하여 Pod 및 노드 오류를 완화합니다.
- AMQ Broker에서 영구 스토리지를 활성화하면 각 브로커 Pod는 영구 볼륨 클레임(PVC)을 사용하여 클레임한 PV(영구 볼륨)에 해당 데이터를 씁니다. Pod를 삭제한 후에도 PV를 사용할 수 있습니다. 브로커 포드가 실패하면 OpenShift에서 동일한 이름으로 Pod를 재시작하고 메시징 데이터가 포함된 기존 PV를 사용합니다.
클러스터에서 여러 브로커 Pod를 실행하고 별도의 노드에 Pod를 배포하여 노드 장애에서 복구할 수 있습니다. 각 브로커 Pod는 메시지 데이터를 자체 PV에 씁니다. 그러면 해당 브로커 Pod가 다른 노드에서 재시작되는 경우 사용할 수 있습니다.
Openshift 클러스터의 노드 장애로부터 복구하기 위한 평균 시간(MTTR)이 AMQ Broker의 서비스 가용성 요구 사항을 충족하지 않는 경우 더 빠른 복구를 제공하기 위해 리더 지원 배포를 생성할 수 있습니다. leader-follower 배포를 사용하여 클러스터 또는 광범위한 데이터 센터 중단으로부터 보호할 수도 있습니다. 자세한 내용은 4.23절. “고가용성을 위해 leader-follower 브로커 배포 구성”의 내용을 참조하십시오.
추가 리소스
영구 스토리지 사용 방법에 대한 자세한 내용은 2.9절. “Operator 배포 노트” 을 참조하십시오.
별도의 노드에 브로커 Pod를 배포하는 방법에 대한 자세한 내용은 4.17.2절. “허용 오차를 사용하여 Pod 배치 제어” 을 참조하십시오.
2.2. AMQ Broker Operator 사용자 정의 리소스 정의 개요
일반적으로 CRD(Custom Resource Definition)는 Operator와 함께 배포된 사용자 정의 OpenShift 오브젝트에 대해 수정할 수 있는 구성 항목의 스키마입니다. 해당 CR(사용자 정의 리소스) 인스턴스를 생성하면 CRD의 구성 항목에 대한 값을 지정할 수 있습니다. Operator 개발자인 경우 CRD를 통해 노출하는 항목이 기본적으로 배포된 오브젝트를 구성하고 사용하는 방법에 대한 API가 됩니다. CRD가 Kubernetes를 통해 자동으로 노출되므로 일반 HTTP curl
명령을 통해 CRD에 직접 액세스할 수 있습니다.
OperatorHub 그래픽 인터페이스를 통해 OpenShift CLI(명령줄 인터페이스) 또는 Operator Lifecycle Manager를 사용하여 AMQ Broker Operator를 설치할 수 있습니다. 두 경우 모두 AMQ Broker Operator에는 아래에 설명된 CRD가 포함되어 있습니다.
- 주요 브로커 CRD
브로커 배포를 생성하고 구성하기 위해 이 CRD를 기반으로 CR 인스턴스를 배포합니다.
Operator 설치 방법에 따라 이 CRD는 다음과 같습니다.
-
Operator 설치 아카이브의
crds
디렉터리에 있는broker_activemqartis_crd
파일(OpenShift CLI 설치 방법) -
OpenShift Container Platform 웹 콘솔의
사용자 정의 리소스 정의
섹션에 있는ActiveMQArtemis
CRD(OperatorHub 설치 방법)
-
Operator 설치 아카이브의
- Address CRD
이 CRD를 기반으로 CR 인스턴스를 배포하여 브로커 배포에 대한 주소 및 큐를 생성합니다.
Operator 설치 방법에 따라 이 CRD는 다음과 같습니다.
-
Operator 설치 아카이브의
crds
디렉토리에 있는broker_activemqartemisaddress_crd
파일(OpenShift CLI 설치 방법) -
OpenShift Container Platform 웹 콘솔의 사용자
정의 리소스 정의
섹션에 있는ActiveMQArtemisAddresss
CRD(OperatorHub 설치 방법)
-
Operator 설치 아카이브의
주소 CRD는 7.12에서 더 이상 사용되지 않습니다. addresss CRD를 기반으로 CR 인스턴스를 생성하는 대신 ActiveMQArtemis
CR 인스턴스에서 brokerProperties
속성을 사용할 수 있습니다.
- 보안 CRD
이 CRD를 기반으로 CR 인스턴스를 배포하여 사용자를 생성하고 해당 사용자를 보안 컨텍스트와 연결합니다.
Operator 설치 방법에 따라 이 CRD는 다음과 같습니다.
-
Operator 설치 아카이브의
crds
디렉터리에 있는broker_activemqartissecurity_crd
파일(OpenShift CLI 설치 방법) -
OpenShift Container Platform 웹 콘솔의
사용자 정의 리소스 정의
섹션에 있는ActiveMQArtemisSecurity
CRD(OperatorHub 설치 방법).
-
Operator 설치 아카이브의
보안 CRD는 7.12에서 더 이상 사용되지 않습니다. 보안 CRD를 기반으로 CR 인스턴스를 생성하는 대신 ActiveMQArtemis
CR 인스턴스에서 brokerProperties
속성을 사용할 수 있습니다.
- scaleDown CRD
Operator 는 메시지 마이그레이션을 위해 스케일다운 컨트롤러를 인스턴스화할 때 이 CRD를 기반으로 CR 인스턴스를 자동으로 생성합니다.
Operator 설치 방법에 따라 이 CRD는 다음과 같습니다.
-
Operator 설치 아카이브의
crds
디렉터리에 있는broker_activemqartemisscaledown_crd
파일(OpenShift CLI 설치 방법) -
OpenShift Container Platform 웹 콘솔의 사용자
정의 리소스 정의
섹션에 있는ActiveMQArtemisScaledown
CRD(OperatorHub 설치 방법).
-
Operator 설치 아카이브의
스케일다운 CRD는 7.12에서 더 이상 사용되지 않으며 클러스터를 축소하는 데 필요하지 않습니다.
추가 리소스
다음을 사용하여 AMQ Broker Operator(및 포함된 모든 CRD)를 설치하는 방법을 알아보려면 다음을 수행합니다.
- OpenShift CLI에서 참조하십시오. 3.2절. “CLI를 사용하여 Operator 설치”
- Operator Lifecycle Manager 및 OperatorHub 그래픽 인터페이스는 3.3절. “OperatorHub를 사용하여 Operator 설치” 을 참조하십시오.
기본 브로커 및 주소 CRD를 기반으로 CR 인스턴스를 생성할 때 사용할 전체 구성 참조는 다음을 참조하십시오.
2.3. AMQ Broker Operator 샘플 사용자 정의 리소스 개요
설치 중에 다운로드 및 추출하는 AMQ Broker Operator 아카이브에는 deploy/crs
디렉터리에 있는 샘플 CR(사용자 정의 리소스) 파일이 포함됩니다. 이러한 샘플 CR 파일을 사용하면 다음을 수행할 수 있습니다.
- SSL 또는 클러스터링 없이 최소 브로커를 배포합니다.
- 주소를 정의합니다.
다운로드 및 추출하는 브로커 Operator 아카이브에는 아래 나열된 대로 deploy/examples/address
및 deploy/examples/artemis
디렉터리에 배포와 같은 CR도 포함되어 있습니다.
address_queue.yaml
- 다른 이름으로 주소 및 큐를 배포합니다. CR 배포 취소 시 큐를 삭제합니다.
address_topic.yaml
- 멀티 캐스트 라우팅 유형으로 주소를 배포합니다. CR 배포 취소 시 주소를 삭제합니다.
artemis_address_settings.yaml
- 특정 주소 설정으로 브로커를 배포합니다.
artemis_cluster_persistence.yaml
- 영구 스토리지를 사용하여 클러스터형 브로커를 배포합니다.
artemis_enable_metrics_plugin.yaml
- Prometheus 지표 플러그인을 활성화하여 지표를 수집합니다.
artemis_resources.yaml
- 브로커의 CPU 및 메모리 리소스 제한을 설정합니다.
artemis_single.yaml
- 단일 브로커 배포.
2.4. CRD(사용자 정의 리소스 정의)에 노출되지 않은 항목 구성
ActiveMQArtemis
사용자 정의 리소스에서 brokerProperties
속성을 사용하여 브로커의 구성 설정을 구성할 수 있습니다. brokerProperties
를 사용하는 것은 다음과 같은 설정을 구성하려는 경우 특히 유용합니다.
-
ActiveMQArtemis
CRD에 노출되지 않음 -
ActiveMQArtemisAddress
및ActiveMQArtemisSecurity
CRD에 노출됩니다.
AMQ Broker 7.12부터 ActiveMQArtemisAddress
및 ActiveMQArtemisSecurity
CRD가 더 이상 사용되지 않음
brokerProperties
속성 아래에 추가된 구성 설정은 시크릿에 저장됩니다. 이 시크릿은 브로커 Pod에 속성 파일로 마운트됩니다. 시작 시 속성 파일은 XML 구성을 적용한 후 내부 java 구성에 직접 적용됩니다.
- 예
- 다음 예제에서는 단일 속성이 구성 빈에 적용됩니다.
spec: ... brokerProperties: - globalMaxSize=500m ...
다음 예제에서는 다른 브로커와 메시지를 미러링하는 target
이라는 브로커 연결을 생성하기 위해 구성 빈의 중첩된 컬렉션에 여러 속성이 적용됩니다.
spec: ... brokerProperties - "AMQPConnections.target.uri=tcp://<hostname>:<port>" - "AMQPConnections.target.connectionElements.mirror.type=MIRROR" - "AMQPConnections.target.connectionElements.mirror.messageAcknowledgements=true" - "AMQPConnections.target.connectionElements.mirror.queueCreation=true" - "AMQPConnections.target.connectionElements.mirror.queueRemoval=true" ...
brokerProperties
속성을 사용하면 OpenShift Container Platform에서 AMQ Broker에 대해 구성할 수 없는 많은 구성 항목에 액세스할 수 있습니다. 잘못 사용하면 일부 속성이 배포에 심각한 영향을 미칠 수 있습니다. 이 방법을 사용하여 브로커를 구성할 때는 항상 주의하십시오.
brokerProperties
의 상태 보고brokerProperties
속성에 구성된 항목의 상태는ActiveMQArtemis
CR의BrokerPropertiesApplied
상태 섹션에 제공됩니다. 예를 들면 다음과 같습니다.- lastTransitionTime: "2023-02-06T20:50:01Z" message: "" reason: Applied status: "True" type: BrokerPropertiesApplied
reason
필드에는brokerProperties
속성에 구성된 항목의 상태를 표시하는 다음 값 중 하나가 포함되어 있습니다.적용됨
- OpenShift Container Platform은 업데이트된 보안을 각 브로커 Pod의 속성 파일에 전파했습니다.
AppliedWithError
-
OpenShift Container Platform은 업데이트된 보안을 각 브로커 Pod의 속성 파일에 전파했습니다. 그러나
brokerProperties
구성에서 오류가 발견되었습니다. CR의status
섹션에서message
필드를 확인하여 잘못된 속성을 식별하고 CR에서 수정합니다. OutOfSync
-
OpenShift Container Platform은 아직 업데이트된 시크릿을 각 브로커 Pod의 속성 파일에 전파하지 않았습니다. OpenShift Container Platform에서 업데이트된 보안을 각 Pod에 전파하면
이유
필드 값이Applied
로 변경됩니다.
브로커는 포드에 마운트된 속성 파일에 대한 업데이트를 포함하여 구성 변경 사항을 주기적으로 확인하고 변경 사항을 탐지하면 구성을 다시 로드합니다. 그러나 브로커를 시작할 때만 읽는 속성 업데이트(예: JVM 설정)는 브로커를 다시 시작할 때까지 다시 로드되지 않습니다. 다시 로드하는 속성에 대한 자세한 내용은 AMQ Broker 구성에서 구성 업데이트 다시 로드 를 참조하십시오.
추가 정보
CR의 brokerProperties
요소에서 구성할 수 있는 속성 목록은 AMQ Broker 구성 의 브로커 속성을 참조하십시오.
2.5. Cluster Operator 배포에 대한 옵션 조사
Cluster Operator가 실행되면 AMQ Broker CR(사용자 정의 리소스)의 업데이트를 감시하기 시작합니다.
Cluster Operator를 배포하여 CR을 조사하도록 선택할 수 있습니다.
- 단일 네임스페이스(Operator를 포함하는 동일한 네임스페이스)
- 모든 네임스페이스
클러스터의 네임스페이스에 이전 버전의 AMQ Broker Operator를 이미 설치한 경우, 잠재적인 충돌을 방지하기 위해 해당 네임스페이스를 확인하기 위해 AMQ Broker Operator 7.12 버전을 설치하지 않는 것이 좋습니다.
2.6. Operator에서 이미지를 배포하는 데 사용할 구성을 결정하는 방법
ActiveMQArtemis
CR에서는 다음 구성을 사용하여 컨테이너 이미지를 배포할 수 있습니다.
-
spec.version
속성에 버전 번호를 지정하고 Operator에서 해당 버전 번호에 대해 배포할 브로커 및 init 컨테이너 이미지를 선택할 수 있도록 합니다. -
Operator가
spec.deploymentPlan.image
및spec.deploymentPlan.initImage
속성에 배포할 특정 브로커 및 init 컨테이너 이미지의 레지스트리 URL을 지정합니다. -
spec.deploymentPlan.image
속성 값을자리 표시자
로 설정합니다. 즉, Operator는 Operator 버전에 알려진 최신 브로커 및 init 컨테이너 이미지를 선택합니다.
컨테이너 이미지를 배포하는 데 이러한 구성을 사용하지 않는 경우 Operator는 Operator 버전에 알려진 최신 브로커 및 init 컨테이너 이미지를 선택합니다.
CR을 저장하면 Operator에서 다음 검증을 수행하여 사용할 구성을 결정합니다.
Operator는 CR에
spec.version
속성이 포함되어 있는지 확인합니다.CR에
spec.version
속성이 포함되어 있지 않은 경우 Operator는 CR에spec.deploymentPlan.image
및spec.deployment.Plan.initImage
속성이 포함되어 있는지 확인합니다.-
CR에
spec.deploymentPlan.image
및spec.deployment.Plan.initImage
속성이 포함된 경우 Operator는 레지스트리 URL로 식별되는 컨테이너 이미지를 배포합니다. -
CR에
spec.deploymentPlan.image
및spec.deployment.Plan.initImage
속성이 없으면 Operator는 배포할 컨테이너 이미지를 선택합니다. 자세한 내용은 2.7절. “Operator에서 컨테이너 이미지를 선택하는 방법”의 내용을 참조하십시오.
-
CR에
CR에
spec.version
속성이 포함된 경우 Operator는 지정된 버전 번호가 Operator에서 지원하는 유효한 버전 범위 내에 있는지 확인합니다.-
spec.version
속성 값이 유효하지 않으면 Operator에서 배포를 중지합니다. spec.version
속성 값이 유효한 경우 Operator는 CR에spec.deploymentPlan.image
및spec.deployment.Plan.initImage
속성이 포함되어 있는지 확인합니다.-
CR에
spec.deploymentPlan.image
및spec.deployment.Plan.initImage
속성이 포함된 경우 Operator는 레지스트리 URL로 식별되는 컨테이너 이미지를 배포합니다. -
CR에
spec.deploymentPlan.image
및spec.deployment.Plan.initImage
속성이 없으면 Operator는 배포할 컨테이너 이미지를 선택합니다. 자세한 내용은 2.7절. “Operator에서 컨테이너 이미지를 선택하는 방법”의 내용을 참조하십시오.
-
CR에
-
CR에 spec.deploymentPlan.image
및 spec.deployment.Plan.initImage
속성 중 하나만 포함하는 경우 Operator는 spec.version
번호 속성을 사용하여 CR에 없는 속성의 이미지를 선택하거나 spec.version
속성이 CR에 없는 경우 해당 속성에 대해 최신 알려진 이미지를 선택합니다.
spec.deployment.Plan.initImage
속성 없이 spec.deploymentPlan.image
속성을 지정하지 않거나 그 반대의 경우 브로커 및 init 컨테이너 이미지의 불일치 버전이 배포되지 않도록 하는 것이 좋습니다.
2.7. Operator에서 컨테이너 이미지를 선택하는 방법
CR에 spec.deploymentPlan.image
및 spec.deployment.Plan.initImage
속성이 포함되어 있지 않은 경우 Operator는 Operator에서 배포할 특정 컨테이너 이미지의 레지스트리 URL을 지정합니다.
OpenShift 명령줄 인터페이스를 사용하여 Operator를 설치하는 경우 Operator 설치 아카이브에 broker_activemqartemis_cr.yaml
이라는 샘플 CR 파일이 포함되어 있습니다. 샘플 CR에서 spec.deploymentPlan.image
속성이 포함되고 자리 표시자
의 기본값으로 설정됩니다. 이 값은 CR을 배포할 때까지 Operator가 브로커 컨테이너 이미지를 선택하지 않음을 나타냅니다.
Init Container 이미지를 지정하는 spec.deploymentPlan.initImage
속성은 broker_activemqartemis_cr.yaml
샘플 CR 파일에 포함되지 않습니다. CR에 spec.deploymentPlan.initImage
속성을 명시적으로 포함하지 않고 값을 지정하지 않으면 Operator는 선택한 Operator 컨테이너 이미지와 일치하는 기본 제공 Init Container 이미지를 선택합니다.
브로커 및 Init Container 이미지를 선택하기 위해 Operator는 먼저 필요한 이미지의 AMQ Broker 버전을 결정합니다. Operator는 spec.version
속성 값에서 버전을 가져옵니다. spec.version
속성이 설정되지 않은 경우 Operator는 AMQ Broker에 최신 버전의 이미지를 사용합니다.
그러면 Operator에서 컨테이너 플랫폼을 감지합니다. AMQ Broker Operator는 다음 컨테이너 플랫폼에서 실행할 수 있습니다.
- OpenShift Container Platform (x86_64)
- IBM Z의 OpenShift Container Platform (s390x)
- IBM Power Systems의 OpenShift Container Platform (ppc64le)
Operator는 AMQ Broker 버전과 컨테이너 플랫폼을 기반으로 operator.yaml
구성 파일에서 두 가지 환경 변수 세트를 참조합니다. 이러한 환경 변수 세트는 다음 섹션에 설명된 대로 다양한 버전의 AMQ Broker에 대해 broker 및 Init Container 이미지를 지정합니다.
2.7.1. 브로커 및 init 컨테이너 이미지의 환경 변수
operator.yaml
에 포함된 환경 변수에는 다음과 같은 명명 규칙이 있습니다.
컨테이너 플랫폼 | 규칙 이름 지정 |
---|---|
OpenShift Container Platform |
|
IBM Z의 OpenShift Container Platform |
|
IBM Power Systems의 OpenShift Container Platform |
|
다음은 지원되는 각 컨테이너 플랫폼에 대한 브로커 및 init 컨테이너 이미지의 환경 변수 이름의 예입니다.
컨테이너 플랫폼 | 환경 변수 이름 |
---|---|
OpenShift Container Platform |
|
IBM Z의 OpenShift Container Platform |
|
IBM Power Systems의 OpenShift Container Platform |
|
각 환경 변수의 값은 Red Hat에서 사용할 수 있는 컨테이너 이미지의 주소를 지정합니다. 이미지 이름은SHA( Secure Hash Algorithm ) 값으로 표시됩니다. 예를 들면 다음과 같습니다.
- name: RELATED_IMAGE_ActiveMQ_Artemis_Broker_Kubernetes_7123 value: registry.redhat.io/amq7/amq-broker-rhel8@sha256:55ae4e28b100534d63c34ab86f69230d274c999d46d1493f26fe3e75ba7a0cec
따라서 AMQ Broker 버전과 컨테이너 플랫폼을 기반으로 Operator는 브로커 및 init 컨테이너에 적용 가능한 환경 변수 이름을 결정합니다. Operator는 브로커 컨테이너를 시작할 때 해당 이미지 값을 사용합니다.
추가 리소스
- AMQ Broker Operator를 사용하여 브로커 배포를 생성하는 방법을 알아보려면 3장. AMQ Broker Operator를 사용하여 OpenShift Container Platform에 AMQ Broker 배포 를 참조하십시오.
- Operator에서 Init Container를 사용하여 브로커 구성을 생성하는 방법에 대한 자세한 내용은 4.1절. “Operator에서 브로커 구성을 생성하는 방법” 을 참조하십시오.
- 사용자 정의 Init Container 이미지를 빌드하고 지정하는 방법을 알아보려면 4.11절. “사용자 정의 Init Container 이미지 지정” 를 참조하십시오.
2.8. CR(사용자 정의 리소스)의 이미지 및 버전 구성 검증
CR을 저장한 후 Operator는 CR 구성에 대해 다음 검증을 수행하고 CR에 상태를 제공합니다.
검증 | 검증의 목적 | CR에 보고된 상태 |
---|---|---|
CR에 |
|
|
CR에 | 이 구성을 사용하면 브로커 및 init 컨테이너 이미지의 다른 버전을 배포할 수 있으므로 브로커가 시작되지 않을 수 있습니다. |
'Valid' 조건은 |
CR에 |
|
|
|
CR에 두 속성이 모두 구성된 경우 배포된 실제 브로커 버전과 |
|
추가 리소스
CR에서 상태 정보를 보는 방법에 대한 자세한 내용은 브로커 배포에 대한 상태 정보 보기를 참조하십시오.
2.9. Operator 배포 노트
이 섹션에서는 Operator 기반 배포를 계획할 때 몇 가지 중요한 고려 사항에 대해 설명합니다.
- AMQ Broker Operator와 함께 제공되는 CRD(Custom Resource Definitions)를 배포하려면 OpenShift 클러스터에 대한 클러스터 관리자 권한이 필요합니다. Operator가 배포되면 관리자가 아닌 사용자는 해당 사용자 정의 리소스(CR)를 통해 브로커 인스턴스를 생성할 수 있습니다. 일반 사용자가 CR을 배포할 수 있도록 하려면 먼저 클러스터 관리자가 CRD에 역할 및 권한을 할당해야 합니다. 자세한 내용은 OpenShift Container Platform 설명서의 사용자 정의 리소스 정의에 대한 클러스터 역할 생성 을 참조하십시오.
- 최신 Operator 버전에 대한 CRD로 클러스터를 업데이트하면 이 업데이트가 클러스터의 모든 프로젝트에 영향을 미칩니다. 이전 버전의 Operator에서 배포한 브로커 Pod는 해당 상태를 업데이트할 수 없게 될 수 있습니다. OpenShift Container Platform 웹 콘솔에서 실행 중인 브로커 Pod의 로그 탭을 클릭하면 'UpdatePodStatus'가 실패했음을 나타내는 메시지가 표시됩니다. 그러나 해당 프로젝트의 브로커 Pod 및 Operator는 예상대로 계속 작동합니다. 영향을 받는 프로젝트의 이 문제를 해결하려면 최신 버전의 Operator를 사용하도록 해당 프로젝트를 업그레이드해야 합니다.
여러 사용자 정의 리소스(CR) 인스턴스를 배포하여 지정된 OpenShift 프로젝트에서 두 개 이상의 브로커 배포를 생성할 수 있지만 일반적으로 프로젝트에 단일 브로커 배포를 생성한 다음 주소를 위해 여러 CR 인스턴스를 배포할 수 있습니다.
별도의 프로젝트에서 브로커 배포를 생성하는 것이 좋습니다.
영구 스토리지로 브로커를 배포하고 OpenShift 클러스터에 컨테이너 네이티브 스토리지가 없는 경우 PV(영구 볼륨)를 수동으로 프로비저닝하고 Operator에서 이를 클레임할 수 있는지 확인해야 합니다. 예를 들어 영구 스토리지가 있는 두 브로커의 클러스터를 생성하려면(즉, CR에서
persistenceEnabled=true
를 설정하여) 두 개의 영구 볼륨을 사용할 수 있어야 합니다. 기본적으로 각 브로커 인스턴스에는 2GiB의 스토리지가 필요합니다.CR에
persistenceEnabled=false
를 지정하는 경우 배포된 브로커는 임시 스토리지를 사용합니다. 임시 스토리지는 브로커 Pod를 다시 시작할 때마다 기존 데이터가 손실됩니다.OpenShift Container Platform에서 영구 스토리지 프로비저닝에 대한 자세한 내용은 다음을 참조하십시오.
CR을 처음 배포하기 전에 아래 나열된 항목에 대한 구성을 기본 브로커 CR 인스턴스에 추가해야 합니다. 이러한 항목에 대한 구성을 이미 실행 중인 브로커 배포에 추가할 수 없습니다.
-
Operator가 StatefulSet에서 동적으로 업데이트할 수 없는 CR에서 매개변수를 업데이트하면 Operator가 StatefulSet을 삭제하고 업데이트된 매개변수 값으로 다시 생성합니다. StatefulSet을 삭제하면 모든 Pod가 삭제되고 다시 생성되어 브로커가 일시적으로 중단됩니다. Operator가 StatefulSet에서 동적으로 업데이트할 수 없는 CR 업데이트의 예는
persistenceEnabled=false
를persistenceEnabled=true
로 변경하는 것입니다.
2.10. 기존 Operator에서 조사한 네임스페이스 확인
클러스터에 이미 AMQ Broker용 설치된 Operator가 포함되어 있고 새 Operator에서 모든 네임스페이스 또는 여러 네임스페이스를 조사하려면 새 Operator에서 기존 Operator와 동일한 네임스페이스를 감시하지 않아야 합니다. 다음 절차에 따라 기존 Operator에서 조사한 네임스페이스를 식별합니다.
프로세스
- OpenShift Container Platform 웹 콘솔의 왼쪽 창에서 클릭합니다.
-
프로젝트 드롭다운 목록에서
모든 프로젝트를
선택합니다. 필터 이름 상자에서 클러스터에 설치된 AMQ Broker용 Operator를 표시하려면 문자열(예:
amq
)을 지정합니다.참고namespace 열에는 각 Operator가 배포된 네임스페이스가 표시됩니다.
AMQ Broker용 각 Operator가 감시 하도록 구성된 네임스페이스를 확인합니다.
- Operator 이름을 클릭하여 Operator 세부 정보를 표시하고 YAML 탭을 클릭합니다.
WATCH_NAMESPACE
를 검색하고 Operator에서 조사하는 네임스페이스를 확인합니다.-
WATCH_NAMESPACE
섹션에metadata.namespace
값이 있는fieldPath
필드가 있는 경우 Operator에서 배포된 네임스페이스를 감시하고 있습니다. WATCH_NAMESPACE
섹션에 네임스페이스 목록이 있는value
필드가 있는 경우 Operator에서 지정된 네임스페이스를 모니터링합니다. 예를 들면 다음과 같습니다.- name: WATCH_NAMESPACE value: "namespace1, namespace2"
WATCH_NAMESPACE
섹션에값
필드가 비어 있거나 별표가 있는 경우 Operator에서 클러스터의 모든 네임스페이스를 감시하고 있습니다. 예를 들면 다음과 같습니다.- name: WATCH_NAMESPACE value: ""
이 경우 새 Operator를 배포하기 전에 기존 Operator를 제거하거나 특정 네임스페이스를 조사하려면 해당 Operator를 재구성해야 합니다.
-
다음 섹션의 절차에서는 Operator를 설치하고 사용자 정의 리소스(CR)를 사용하여 OpenShift Container Platform에 브로커 배포를 생성하는 방법을 보여줍니다. 절차를 완료한 후 Operator는 개별 Pod에서 실행되며 생성하는 각 브로커 인스턴스는 Operator와 동일한 프로젝트의 StatefulSet에서 개별 Pod로 실행됩니다. 나중에 전용 주소 지정 CR을 사용하여 브로커 배포에서 주소를 정의하는 방법을 확인할 수 있습니다.
3장. AMQ Broker Operator를 사용하여 OpenShift Container Platform에 AMQ Broker 배포
3.1. 사전 요구 사항
- Operator를 설치하고 브로커 배포를 생성하는 데 사용하기 전에 2.9절. “Operator 배포 노트” 에서 Operator 배포 노트를 참조해야 합니다.
3.2. CLI를 사용하여 Operator 설치
각 Operator 릴리스에서는 아래에 설명된 대로 최신 AMQ Broker 7.12.3 Operator 설치 및 예제 파일을 다운로드해야 합니다.
이 섹션의 절차에서는 OpenShift CLI(명령줄 인터페이스)를 사용하여 지정된 OpenShift 프로젝트에서 AMQ Broker 7.12의 최신 버전을 설치하고 배포하는 방법을 보여줍니다. 후속 절차에서는 이 Operator를 사용하여 일부 브로커 인스턴스를 배포합니다.
- OperatorHub 그래픽 인터페이스를 사용하는 AMQ Broker Operator를 설치하는 다른 방법은 3.3절. “OperatorHub를 사용하여 Operator 설치” 을 참조하십시오.
- 기존 Operator 기반 브로커 배포 업그레이드에 대한 자세한 내용은 6장. Operator 기반 브로커 배포 업그레이드 을 참조하십시오.
3.2.1. Operator 배포 준비
CLI를 사용하여 Operator를 배포하기 전에 Operator 설치 파일을 다운로드하고 배포를 준비해야 합니다.
프로세스
- 웹 브라우저에서 AMQ Broker 7.12.3 릴리스 의 소프트웨어 다운로드 페이지로 이동합니다.
-
버전 드롭다운 목록의 값이
7.12.3
으로 설정되고 릴리스 탭이 선택되어 있는지 확인합니다. 최신 AMQ Broker 7.12.3 Operator 설치 및 예제 파일 옆에 있는 Download 를 클릭합니다.
amq-broker-operator-7.12.3-ocp-install-examples-rhel8.zip
압축 아카이브가 자동으로 시작됩니다.아카이브를 선택한 디렉터리로 이동합니다. 다음 예제에서는 아카이브를
~/broker/operator
라는 디렉터리로 이동합니다.$ mkdir ~/broker/operator $ mv amq-broker-operator-7.12.3-ocp-install-examples-rhel8.zip ~/broker/operator
선택한 디렉터리에서 아카이브의 내용을 추출합니다. 예를 들면 다음과 같습니다.
$ cd ~/broker/operator $ unzip amq-broker-operator-7.12.3-ocp-install-examples-rhel8.zip
아카이브를 추출할 때 생성된 디렉터리로 전환합니다. 예를 들면 다음과 같습니다.
$ cd amq-broker-operator-7.12.3-ocp-install-examples
클러스터 관리자로 OpenShift Container Platform에 로그인합니다. 예를 들면 다음과 같습니다.
$ oc login -u system:admin
Operator를 설치할 프로젝트를 지정합니다. 새 프로젝트를 생성하거나 기존 프로젝트로 전환할 수 있습니다.
새 프로젝트를 생성합니다.
$ oc new-project <project_name>
또는 기존 프로젝트로 전환합니다.
$ oc project <project_name>
Operator와 함께 사용할 서비스 계정을 지정합니다.
-
추출한 Operator 아카이브의
배포
디렉터리에서service_account.yaml
파일을 엽니다. -
kind
요소가ServiceAccount
로 설정되어 있는지 확인합니다. -
기본 서비스 계정 이름을 변경하려면
metadata
섹션에서amq-broker-controller-manager
를 사용자 지정 이름으로 교체합니다. 프로젝트에서 서비스 계정을 생성합니다.
$ oc create -f deploy/service_account.yaml
-
추출한 Operator 아카이브의
Operator의 역할 이름을 지정합니다.
-
role.yaml
파일을 엽니다. 이 파일은 Operator가 사용하고 수정할 수 있는 리소스를 지정합니다. -
kind
요소가Role
로 설정되어 있는지 확인합니다. -
기본 역할 이름을 변경하려면
metadata
섹션에서amq-broker-operator-role
을 사용자 지정 이름으로 교체합니다. 프로젝트에서 역할을 생성합니다.
$ oc create -f deploy/role.yaml
-
Operator에 대한 역할 바인딩을 지정합니다. 역할 바인딩은 지정한 이름에 따라 이전에 생성된 서비스 계정을 Operator 역할에 바인딩합니다.
-
role_binding.yaml
파일을 엽니다. ServiceAccount
및Role
의name
값이service_account.yaml
및role.yaml
파일에 지정된 값과 일치하는지 확인합니다. 예를 들면 다음과 같습니다.metadata: name: amq-broker-operator-rolebinding subjects: kind: ServiceAccount name: amq-broker-controller-manager roleRef: kind: Role name: amq-broker-operator-role
프로젝트에 역할 바인딩을 생성합니다.
$ oc create -f deploy/role_binding.yaml
-
Operator의 리더 선택 역할 바인딩을 지정합니다. 역할 바인딩은 지정한 이름에 따라 이전에 생성된 서비스 계정을 리더 선택 역할에 바인딩합니다.
Operator에 대한 리더 선택 역할을 생성합니다.
$ oc create -f deploy/election_role.yaml
프로젝트에서 리더 선택 역할 바인딩을 생성합니다.
$ oc create -f deploy/election_role_binding.yaml
(선택 사항) Operator에서 여러 네임스페이스를 조사하려면 다음 단계를 완료합니다.
참고OpenShift Container Platform 클러스터에 AMQ Broker용 Operator가 이미 포함된 경우 새 Operator에서 기존 Operator와 동일한 네임스페이스를 감시하지 않아야 합니다. 기존 Operator에서 조사하는 네임스페이스를 식별하는 방법에 대한 자세한 내용은 기존 Operator 에서 조사한 네임스페이스 식별을 참조하십시오.
-
다운로드 및 추출한 Operator 아카이브의 배포 디렉터리에서
operator_yaml
파일을 엽니다. Operator에서 클러스터의 모든 네임스페이스를 조사하려면
WATCH_NAMESPACE
섹션에서value
속성을 추가하고 값을 별표로 설정합니다.WATCH_NAMESPACE
섹션에서 기존 속성을 주석 처리합니다. 예를 들면 다음과 같습니다.- name: WATCH_NAMESPACE value: "*" # valueFrom: # fieldRef: # fieldPath: metadata.namespace
참고충돌을 방지하려면 여러 Operator가 동일한 네임스페이스를 감시하지 않도록 합니다. 예를 들어 클러스터의 모든 네임스페이스를 조사하기 위해 Operator를 배포하는 경우 다른 Operator를 배포하여 개별 네임스페이스를 조사할 수 없습니다. Operator가 이미 클러스터에 배포된 경우 다음 단계에 설명된 대로 새 Operator에서 조사하는 네임스페이스 목록을 지정할 수 있습니다.
Operator에서
WATCH_NAMESPACE
섹션에서 클러스터의 여러 네임스페이스를 조사하지만 모두 조사하려면 네임스페이스 목록을 지정합니다. 기존 Operator에서 조사하는 네임스페이스를 제외해야 합니다. 예를 들면 다음과 같습니다.- name: WATCH_NAMESPACE value: "namespace1, namespace2"`.
-
다운로드 및 추출한 Operator 아카이브의 배포 디렉터리에서
cluster_role_binding.yaml
파일을 엽니다. 주체 섹션에서 Operator를 배포하는 OpenShift Container Platform 프로젝트에 해당하는 네임스페이스를 지정합니다. 예를 들면 다음과 같습니다.
Subjects: - kind: ServiceAccount name: amq-broker-controller-manager namespace: operator-project
참고이전 버전의 Operator를 사용하여 이전에 브로커를 배포하고 Operator를 배포하여 여러 네임스페이스를 조사하려면 업그레이드하기 전에 를 참조하십시오.
프로젝트에 클러스터 역할을 생성합니다.
$ oc create -f deploy/cluster_role.yaml
프로젝트에 클러스터 역할 바인딩을 생성합니다.
$ oc create -f deploy/cluster_role_binding.yaml
-
다운로드 및 추출한 Operator 아카이브의 배포 디렉터리에서
다음 절차에서는 프로젝트에 Operator를 배포합니다.
3.2.2. CLI를 사용하여 Operator 배포
이 섹션의 절차에서는 OpenShift CLI(명령줄 인터페이스)를 사용하여 OpenShift 프로젝트에서 AMQ Broker 7.12용 최신 버전의 Operator를 배포하는 방법을 보여줍니다.
사전 요구 사항
- Operator 배포를 위한 OpenShift 프로젝트를 이미 준비해야 합니다. 3.2.1절. “Operator 배포 준비”을 참조하십시오.
- AMQ Broker 7.3부터 새 버전의 Red Hat Ecosystem Catalog를 사용하여 컨테이너 이미지에 액세스합니다. 이 새 버전의 레지스트리를 사용하려면 이미지에 액세스하기 전에 인증된 사용자가되어야 합니다. 이 섹션의 절차를 수행하려면 먼저 Red Hat Container Registry Authentication 에 설명된 단계를 완료해야 합니다.
영구 스토리지로 브로커를 배포하고 OpenShift 클러스터에 컨테이너 네이티브 스토리지가 없는 경우 PV(영구 볼륨)를 수동으로 프로비저닝하고 Operator에서 클레임할 수 있는지 확인해야 합니다. 예를 들어 영구 스토리지가 있는 두 브로커의 클러스터를 생성하려면(즉, Custom Resource에서
persistenceEnabled=true
를 설정하여) 두 개의 PV를 사용할 수 있어야 합니다. 기본적으로 각 브로커 인스턴스에는 2GiB의 스토리지가 필요합니다.사용자 정의 리소스에서
persistenceEnabled=false
를 지정하면 배포된 브로커는 임시 스토리지를 사용합니다. 임시 스토리지는 브로커 포드를 다시 시작할 때마다 기존 데이터가 손실됩니다.영구 스토리지 프로비저닝에 대한 자세한 내용은 다음을 참조하십시오.
프로세스
OpenShift CLI(명령줄 인터페이스)에서 OpenShift에 클러스터 관리자로 로그인합니다. 예를 들면 다음과 같습니다.
$ oc login -u system:admin
이전에 Operator 배포를 위해 준비한 프로젝트로 전환합니다. 예를 들면 다음과 같습니다.
$ oc project <project_name>
이전에 Operator 설치 아카이브를 추출할 때 생성된 디렉터리로 전환합니다. 예를 들면 다음과 같습니다.
$ cd ~/broker/operator/amq-broker-operator-7.12.3-ocp-install-examples
Operator에 포함된 CRD를 배포합니다. Operator를 배포하고 시작하기 전에 OpenShift 클러스터에 CRD를 설치해야 합니다.
기본 브로커 CRD를 배포합니다.
$ oc create -f deploy/crds/broker_activemqartemis_crd.yaml
주소 CRD를 배포합니다.
$ oc create -f deploy/crds/broker_activemqartemisaddress_crd.yaml
scaledown 컨트롤러 CRD를 배포합니다.
$ oc create -f deploy/crds/broker_activemqartemisscaledown_crd.yaml
보안 CRD를 배포합니다.
$ oc create -f deploy/crds/broker_activemqartemissecurity_crd.yaml
Red Hat Ecosystem Catalog에서 인증에 사용되는 계정과 연결된 풀 시크릿을 OpenShift 프로젝트의
기본
,배포자
및빌더
서비스 계정으로 연결합니다.$ oc secrets link --for=pull default <secret_name> $ oc secrets link --for=pull deployer <secret_name> $ oc secrets link --for=pull builder <secret_name>
다운로드 및 추출한 Operator 아카이브의
배포
디렉터리에서operator.yaml
파일을 엽니다. 아래 표시된 대로spec.containers.image
속성 값이 Operator의 7.12.3-opr-1 버전에 해당하는지 확인합니다.spec: template: spec: containers: #image: registry.redhat.io/amq7/amq-broker-rhel8-operator:7.10 image: registry.redhat.io/amq7/amq-broker-rhel8-operator@sha256:1fd01079ad519e1a47b886893a0635491759ace2f73eda7615a9c8c2f454ba89
참고operator.yaml
파일에서 Operator는 SHA( Secure Hash Algorithm ) 값으로 표시되는 이미지를 사용합니다. 숫자 기호(#
) 기호로 시작하는 주석 행은 SHA 값이 특정 컨테이너 이미지 태그에 해당함을 나타냅니다.Operator를 배포합니다.
$ oc create -f deploy/operator.yaml
OpenShift 프로젝트에서 Operator는 새 Pod에서 시작됩니다.
OpenShift Container Platform 웹 콘솔의 Operator Pod의 Events 탭에 대한 정보는 OpenShift가 사용자가 지정한 Operator 이미지를 배포했음을 확인하고, OpenShift 클러스터의 노드에 새 컨테이너를 할당했으며, 새 컨테이너를 시작했습니다.
또한 Pod에서 로그 탭을 클릭하면 출력에 다음과 같은 행이 포함되어야 합니다.
... {"level":"info","ts":1553619035.8302743,"logger":"kubebuilder.controller","msg":"Starting Controller","controller":"activemqartemisaddress-controller"} {"level":"info","ts":1553619035.830541,"logger":"kubebuilder.controller","msg":"Starting Controller","controller":"activemqartemis-controller"} {"level":"info","ts":1553619035.9306898,"logger":"kubebuilder.controller","msg":"Starting workers","controller":"activemqartemisaddress-controller","worker count":1} {"level":"info","ts":1553619035.9311671,"logger":"kubebuilder.controller","msg":"Starting workers","controller":"activemqartemis-controller","worker count":1}
이전 출력은 새로 배포한 Operator가 Kubernetes와 통신하고, 브로커 및 주소 지정의 컨트롤러가 실행 중인지, 이러한 컨트롤러에서 일부 작업자를 시작했는지 확인합니다.
지정된 OpenShift 프로젝트에 AMQ Broker Operator의 단일 인스턴스 만 배포하는 것이 좋습니다. Operator 배포의 spec.replicas
속성을 1
보다 큰 값으로 설정하거나 동일한 프로젝트에서 Operator를 두 번 이상 배포하는 것은 권장되지 않습니다.
추가 리소스
- OperatorHub 그래픽 인터페이스를 사용하는 AMQ Broker Operator를 설치하는 다른 방법은 3.3절. “OperatorHub를 사용하여 Operator 설치” 을 참조하십시오.
3.3. OperatorHub를 사용하여 Operator 설치
3.3.1. Operator Lifecycle Manager 개요
OpenShift Container Platform 4.5 이상에서 OLM( Operator Lifecycle Manager )은 사용자가 모든 Operator 및 클러스터에서 실행되는 관련 서비스의 라이프사이클을 설치, 업데이트 및 관리하는 데 도움이 됩니다. Operator 프레임워크의 일부입니다. Kubernetes 네이티브 애플리케이션(Operator)을 효율적이고 자동화하며 확장 가능한 방식으로 관리하도록 설계된 오픈 소스 툴킷입니다.
OLM은 OpenShift Container Platform 4.5 이상에서 기본적으로 실행되므로 클러스터 관리자가 클러스터에서 실행되는 Operator를 설치, 업그레이드 및 액세스할 수 있도록 지원합니다. OpenShift Container Platform 웹 콘솔은 클러스터 관리자가 Operator를 설치할 수 있는 관리 화면을 제공하고, 클러스터에 제공되는 Operator 카탈로그를 사용할 수 있는 액세스 권한을 특정 프로젝트에 부여합니다.
OperatorHub 는 OpenShift 클러스터 관리자가 OLM을 사용하여 Operator를 검색, 설치 및 업그레이드하는 데 사용하는 그래픽 인터페이스입니다. 한 번의 클릭으로 이러한 Operator를 OperatorHub에서 가져와서 클러스터에 설치하고 OLM에서 관리할 수 있으며 엔지니어링 팀이 개발, 테스트 및 프로덕션 환경의 소프트웨어를 셀프 서비스할 수 있습니다.
Operator를 배포할 때 CR(사용자 정의 리소스) 인스턴스를 사용하여 독립 실행형 및 클러스터형 브로커와 같은 브로커 배포를 생성할 수 있습니다.
3.3.2. OperatorHub에서 Operator 배포
다음 절차에서는 OperatorHub를 사용하여 최신 버전의 AMQ Broker를 지정된 OpenShift 프로젝트에 배포하는 방법을 보여줍니다.
OperatorHub에서는 각 채널에 제공되는 최신 Operator 버전만 설치할 수 있습니다. 이전 버전의 Operator를 설치하려면 CLI를 사용하여 Operator를 설치해야 합니다. 자세한 내용은 3.2절. “CLI를 사용하여 Operator 설치”의 내용을 참조하십시오.
사전 요구 사항
-
Red Hat Integration - AMQ Broker for RHEL 8(Multiarch)
Operator는 OperatorHub에서 사용할 수 있어야 합니다. - 클러스터 관리자 권한이 있어야 합니다.
프로세스
- OpenShift Container Platform 웹 콘솔에 클러스터 관리자로 로그인합니다.
- 왼쪽 탐색 메뉴에서 → 를 클릭합니다.
- OperatorHub 페이지 상단에 있는 프로젝트 드롭다운 메뉴에서 Operator를 배포할 프로젝트를 선택합니다.
OperatorHub 페이지에서 키워드로 필터링… 상자를 사용하여
Red Hat Integration - AMQ Broker for RHEL 8 (Multiarch)
Operator를 찾습니다.참고OperatorHub에서는 이름에
AMQ Broker
를 포함하는 것보다 두 개 이상의 Operator를 찾을 수 있습니다.Red Hat Integration - AMQ Broker for RHEL 8 (Multiarch)
Operator를 클릭합니다. 이 Operator를 클릭하면 열리는 정보 창을 검토합니다. AMQ Broker 7.12의 경우 이 Operator의 최신 마이너 버전 태그는7.12.3-opr-1
입니다.-
Red Hat Integration - AMQ Broker for RHEL 8 (Multiarch)
Operator를 클릭합니다. 표시되는 대화 상자에서 설치를 클릭합니다. Operator 설치 페이지에서 다음을 수행합니다.
Update Channel 에서
7.11.x
채널을 선택하여 버전 7.11만 업데이트합니다.7.11.x
채널은 LTS(Long Term Support) 채널입니다.OpenShift Container Platform 클러스터가 설치된 시기에 따라 이전 버전의 AMQ Broker 채널도 표시될 수 있습니다. 지원되는 유일한 채널은 LTS 채널인
7.10.x
입니다.설치 모드에서 Operator가 조사하는 네임스페이스를 선택합니다.
- 클러스터의 특정 네임스페이스 - Operator는 해당 네임스페이스에 설치되고 CR 변경을 위해 해당 네임스페이스만 모니터링합니다.
- 모든 네임스페이스 - Operator는 모든 네임스페이스에서 CR 변경 사항을 모니터링합니다.
참고이전 버전의 Operator를 사용하여 이전에 브로커를 배포하고 Operator를 배포하여 많은 네임스페이스를 조사하려면 업그레이드하기 전에 를 참조하십시오.
- 설치된 네임스페이스 드롭다운 메뉴에서 Operator를 설치할 프로젝트를 선택합니다.
승인 전략에서 라디오 버튼의 권한이 자동으로 선택되어
있는지
확인합니다. 이 옵션은 Operator에 대한 업데이트가 설치에 대한 수동 승인이 필요하지 않도록 지정합니다.참고승인 전략은 마이크로 버전의 Operator 간 업데이트에만 적용됩니다. 마이너 Operator 버전 간의 자동 업데이트는 지원되지 않습니다. 예를 들어 현재 Operator가 버전 7.11.7인 경우 버전 7.12.x에 대한 자동 업데이트를 사용할 수 없습니다. Operator의 마이너 버전 간에 업데이트하려면 현재 Operator를 수동으로 제거하고 해당 마이너 버전의 Operator를 사용할 수 있는 채널에서 새 Operator를 설치해야 합니다. 자세한 내용은 6.3절. “OperatorHub를 사용하여 Operator 수동 업그레이드”의 내용을 참조하십시오.
- 설치를 클릭합니다.
Operator 설치가 완료되면 Installed Operators 페이지가 열립니다. Red Hat Integration - AMQ Broker for RHEL 8 (Multiarch)
Operator가 사용자가 지정한 프로젝트 네임스페이스에 설치되어 있는지 확인해야 합니다.
추가 리소스
- Operator for AMQ Broker가 설치된 프로젝트에서 브로커 배포를 생성하는 방법을 알아보려면 3.4.1절. “기본 브로커 인스턴스 배포” 을 참조하십시오.
3.4. Operator 기반 브로커 배포 생성
3.4.1. 기본 브로커 인스턴스 배포
다음 절차에서는 CR(사용자 정의 리소스) 인스턴스를 사용하여 기본 브로커 배포를 생성하는 방법을 보여줍니다.
여러 사용자 정의 리소스(CR) 인스턴스를 배포하여 지정된 OpenShift 프로젝트에서 두 개 이상의 브로커 배포를 생성할 수 있지만 일반적으로 프로젝트에 단일 브로커 배포를 생성한 다음 주소를 위해 여러 CR 인스턴스를 배포할 수 있습니다.
별도의 프로젝트에서 브로커 배포를 생성하는 것이 좋습니다.
AMQ Broker 7.12에서 다음 항목을 구성하려면 CR을 처음 배포하기 전에 기본 브로커 CR 인스턴스에 적절한 구성을 추가해야 합니다.
사전 요구 사항
AMQ Broker Operator가 이미 설치되어 있어야 합니다.
- OpenShift CLI(명령줄 인터페이스)를 사용하여 AMQ Broker Operator를 설치하려면 3.2절. “CLI를 사용하여 Operator 설치” 를 참조하십시오.
- OperatorHub 그래픽 인터페이스를 사용하여 AMQ Broker Operator를 설치하려면 3.3절. “OperatorHub를 사용하여 Operator 설치” 를 참조하십시오.
- Operator가 브로커 배포에 사용할 브로커 컨테이너 이미지를 선택하는 방법을 이해해야 합니다. 자세한 내용은 2.7절. “Operator에서 컨테이너 이미지를 선택하는 방법”의 내용을 참조하십시오.
- AMQ Broker 7.3부터 새 버전의 Red Hat Ecosystem Catalog를 사용하여 컨테이너 이미지에 액세스합니다. 이 새 버전의 레지스트리를 사용하려면 이미지에 액세스하기 전에 인증된 사용자가되어야 합니다. 이 섹션의 절차를 수행하려면 먼저 Red Hat Container Registry Authentication 에 설명된 단계를 완료해야 합니다.
프로세스
Operator를 성공적으로 설치하면 Operator가 실행되고 CR과 관련된 변경 사항을 수신 대기합니다. 이 예제 절차에서는 CR 인스턴스를 사용하여 프로젝트에 기본 브로커를 배포하는 방법을 보여줍니다.
브로커 배포에 대한 CR(사용자 정의 리소스) 인스턴스 구성을 시작합니다.
OpenShift 명령줄 인터페이스 사용:
배포를 생성하는 프로젝트에 CR을 배포할 수 있는 권한이 있는 사용자로 OpenShift에 로그인합니다.
oc login -u <user> -p <password> --server=<host:port>
-
다운로드 및 추출한 Operator 설치 아카이브의
deploy/crs
디렉터리에 포함된broker_activemqartemis_cr.yaml
이라는 샘플 CR 파일을 엽니다.
OpenShift Container Platform 웹 콘솔 사용:
- 배포를 생성하는 프로젝트에 CR을 배포할 권한이 있는 사용자로 콘솔에 로그인합니다.
- 기본 브로커 CRD를 기반으로 새 CR 인스턴스를 시작합니다. 왼쪽 창에서 → 를 클릭합니다.
- ActiveMQArtemis CRD를 클릭합니다.
- Instances 탭을 클릭합니다.
Create ActiveMQArtemis 를 클릭합니다.
콘솔에서 YAML 편집기가 열리고 CR 인스턴스를 구성할 수 있습니다.
기본 브로커 배포의 경우 아래 표시된 구성과 유사할 수 있습니다.
apiVersion: broker.amq.io/v1beta1 kind: ActiveMQArtemis metadata: name: ex-aao spec: deploymentPlan: size: 1 image: placeholder requireLogin: false persistenceEnabled: true journalType: nio messageMigration: true
broker_activemqartemis_cr.yaml
샘플 CR 파일에서image
속성이자리 표시자
의 기본값으로 설정되어 있는지 확인합니다. 이 값은 기본적으로image
속성이 배포에 사용할 브로커 컨테이너 이미지를 지정하지 않음을 나타냅니다. Operator에서 사용할 적절한 브로커 컨테이너 이미지를 결정하는 방법을 알아보려면 2.7절. “Operator에서 컨테이너 이미지를 선택하는 방법” 를 참조하십시오.참고broker_activemqartemis_cr.yaml
샘플 CR은ex-aao
의 이름 지정 규칙을 사용합니다. 이 명명 규칙은 CR이 AMQ Broker Operator 의 예제 리소스임을 나타냅니다. AMQ Broker는 ActiveMQ Artemis 프로젝트를 기반으로 합니다. 이 샘플 CR을 배포할 때 결과 StatefulSet은ex-aao-ss
라는 이름을 사용합니다. 또한 배포의 브로커 Pod는 StatefulSet 이름(예:ex-aao-ss-0
,ex-aao-ss-1
등)을 직접 기반으로 합니다. CR의 애플리케이션 이름은 배포에 StatefulSet의 레이블로 표시됩니다. Pod 선택기에서 이 레이블을 사용할 수 있습니다(예:).-
size
속성은 배포할 브로커 수를 지정합니다.2
이상의 값은 클러스터형 브로커 배포를 지정합니다. 그러나 단일 브로커 인스턴스를 배포하려면 값이1
로 설정되어 있는지 확인합니다. CR 인스턴스를 배포합니다.
OpenShift 명령줄 인터페이스 사용:
- CR 파일을 저장합니다.
브로커 배포를 생성하는 프로젝트로 전환합니다.
$ oc project <project_name>
CR 인스턴스를 생성합니다.
$ oc create -f <path/to/custom_resource_instance>.yaml
OpenShift 웹 콘솔 사용:
- CR 구성을 완료하면 생성 을 클릭합니다.
OpenShift Container Platform 웹 콘솔에서
→ 를 클릭합니다.ex-aao-ss
라는 새로운 StatefulSet이 표시됩니다.- ex-aao-ss StatefulSet을 클릭합니다. CR에 정의한 단일 브로커에 해당하는 하나의 Pod가 있는지 확인합니다.
- StatefulSet에서 Pods 탭을 클릭합니다. ex-aao-ss s Pod를 클릭합니다. 실행 중인 Pod의 이벤트 탭에 브로커 컨테이너가 시작되었는지 확인합니다. 로그 탭에는 브로커 자체가 실행 중임을 보여줍니다.
브로커가 정상적으로 실행 중인지 테스트하려면 브로커 Pod의 쉘에 액세스하여 일부 테스트 메시지를 보냅니다.
OpenShift Container Platform 웹 콘솔 사용:
- → 를 클릭합니다.
- ex-aao-ss s Pod를 클릭합니다.
- 터미널 탭을 클릭합니다.
OpenShift 명령줄 인터페이스 사용:
프로젝트의 Pod 이름 및 내부 IP 주소를 가져옵니다.
$ oc get pods -o wide NAME STATUS IP amq-broker-operator-54d996c Running 10.129.2.14 ex-aao-ss-0 Running 10.129.2.15
브로커 Pod의 쉘에 액세스합니다.
$ oc rsh ex-aao-ss-0
쉘에서
artemis
명령을 사용하여 일부 테스트 메시지를 보냅니다. URL에서 브로커 Pod의 내부 IP 주소를 지정합니다. 예를 들면 다음과 같습니다.sh-4.2$ ./amq-broker/bin/artemis producer --url tcp://10.129.2.15:61616 --destination queue://demoQueue
이전 명령은 브로커에서
demoQueue
라는 큐를 자동으로 생성하고 기본 수량의 1000개의 메시지를 큐로 보냅니다.다음과 유사한 출력이 표시됩니다.
Connection brokerURL = tcp://10.129.2.15:61616 Producer ActiveMQQueue[demoQueue], thread=0 Started to calculate elapsed time ... Producer ActiveMQQueue[demoQueue], thread=0 Produced: 1000 messages Producer ActiveMQQueue[demoQueue], thread=0 Elapsed time in second : 3 s Producer ActiveMQQueue[demoQueue], thread=0 Elapsed time in milli second : 3492 milli seconds
추가 리소스
- 기본 브로커 CR(사용자 정의 리소스)에 대한 전체 구성 참조는 8.1절. “사용자 정의 리소스 구성 참조” 에서 참조하십시오.
- 실행 중인 브로커를 AMQ 관리 콘솔에 연결하는 방법을 알아보려면 5장. Operator 기반 브로커 배포를 위한 AMQ 관리 콘솔에 연결 를 참조하십시오.
3.4.2. 클러스터형 브로커 배포
프로젝트에서 두 개 이상의 브로커 Pod가 실행 중인 경우 Pod는 브로커 클러스터를 자동으로 형성합니다. 클러스터된 구성을 사용하면 브로커가 로드 밸런싱을 위해 서로 연결하고 필요에 따라 메시지를 재배포할 수 있습니다.
다음 절차에서는 클러스터형 브로커를 배포하는 방법을 보여줍니다. 기본적으로 이 배포의 브로커는 요청 부하 분산에서 사용됩니다. 즉, 브로커는 소비자와 일치하는 다른 브로커에게만 메시지를 전달합니다.
사전 요구 사항
- 기본 브로커 인스턴스가 이미 배포되어 있습니다. 3.4.1절. “기본 브로커 인스턴스 배포”을 참조하십시오.
프로세스
- 기본 브로커 배포에 사용한 CR 파일을 엽니다.
클러스터형 배포의 경우
deploymentPlan.size
값이2
이상이어야 합니다. 예를 들면 다음과 같습니다.apiVersion: broker.amq.io/v1beta1 kind: ActiveMQArtemis metadata: name: ex-aao spec: deploymentPlan: size: 4 image: placeholder ...
참고metadata
섹션에는namespace
속성을 포함하고 OpenShift Container Platform 웹 콘솔을 사용하여 CR 인스턴스를 생성하는 경우에만 값을 지정해야 합니다. 지정해야 하는 값은 브로커 배포를 위한 OpenShift 프로젝트의 이름입니다.- 수정된 CR 파일을 저장합니다.
이전에 기본 브로커 배포를 생성한 프로젝트에 CR을 배포할 수 있는 권한이 있는 사용자로 OpenShift에 로그인합니다.
$ oc login -u <user> -p <password> --server=<host:port>
이전에 기본 브로커 배포를 생성한 프로젝트로 전환합니다.
$ oc project <project_name>
명령줄에서 변경 사항을 적용합니다.
$ oc apply -f <path/to/custom_resource_instance>.yaml
OpenShift Container Platform 웹 콘솔에서 CR에 지정된 수에 따라 추가 브로커 Pod가 프로젝트에서 시작됩니다. 기본적으로 프로젝트에서 실행되는 브로커는 클러스터형입니다.
각 Pod의 로그 탭을 엽니다. 로그는 OpenShift가 각 브로커에 클러스터 연결 브릿지를 설정했음을 보여줍니다. 특히 로그 출력에는 다음과 같은 행이 포함됩니다.
targetConnector=ServerLocatorImpl (identity=(Cluster-connection-bridge::ClusterConnectionBridge@6f13fb88
3.4.3. 실행 중인 브로커 배포에 사용자 정의 리소스 변경 사항 적용
다음은 실행 중인 브로커 배포에 CR(사용자 정의 리소스) 변경 사항을 적용하는 데 유의해야 할 몇 가지 중요한 사항입니다.
-
CR에서
persistenceEnabled
속성을 동적으로 업데이트할 수 없습니다. 이 속성을 변경하려면 클러스터를 제로 브로커로 축소합니다. 기존 CR을 삭제합니다. 그런 다음 변경 사항을 사용하여 CR을 다시 생성하고 재배포하여 배포 크기도 지정합니다. -
3.2.2절. “CLI를 사용하여 Operator 배포” 에 설명된 대로 영구 스토리지(즉, CR에서
persistenceEnabled=true
를 설정하여)를 사용하여 브로커 배포를 생성하는 경우 AMQ Broker Operator가 브로커 포드에 대해 영구 볼륨(PV)을 프로비저닝해야 할 수 있습니다. 브로커 배포 크기를 축소하는 경우 Operator는 현재 종료된 브로커 Pod에 대해 이전에 클레임한 PV를 해제합니다. 그러나 CR을 삭제하여 브로커 배포를 제거하는 경우 AMQ Broker Operator 는 배포 시 배포에 남아 있는 브로커 Pod에 대해 PVC(영구 볼륨 클레임)를 릴리스하지 않습니다. 또한 새 배포에서는 릴리스되지 않은 PV를 사용할 수 없습니다. 이 경우 볼륨을 수동으로 해제해야 합니다. 자세한 내용은 OpenShift 문서의 영구 볼륨 릴리스 를 참조하십시오. AMQ Broker 7.12에서 다음 항목을 구성하려면 CR을 처음 배포하기 전에 기본 CR 인스턴스에 적절한 구성을 추가해야 합니다.
- 활성 확장 이벤트 중에 적용하는 추가 변경 사항은 Operator에 의해 대기열에 추가되며 확장이 완료된 경우에만 실행됩니다. 예를 들어 배포 크기를 4개 브로커에서 1개로 축소한다고 가정합니다. 그런 다음 스케일 다운이 진행되는 동안 브로커 관리자 사용자 이름과 암호의 값도 변경합니다. 이 경우 Operator는 배포가 하나의 활성 브로커와 함께 실행될 때까지 사용자 이름과 암호 변경을 대기열에 넣습니다.
-
모든 CR은 배포 크기를 변경하거나 수락자, 커넥터 또는 콘솔의
expose
속성 값을 변경하는 것 외에도 기존 브로커를 다시 시작합니다. 배포에 브로커가 여러 개 있는 경우 한 번에 하나의 브로커만 다시 시작됩니다.
3.5. Operator의 로깅 수준 변경
AMQ Broker Operator의 기본 로깅 수준은 정보 및 오류 메시지를 기록하는 info
입니다. 기본 로깅 수준을 변경하여 Operator 로그에 기록된 세부 정보를 늘리거나 줄일 수 있습니다.
OpenShift Container Platform 명령줄 인터페이스를 사용하여 Operator를 설치하는 경우 Operator 구성 파일 operator.yaml
에서 Operator를 설치하기 전이나 후에 새 로깅 수준을 설정할 수 있습니다. Operator Hub를 사용하는 경우 Operator를 설치한 후 OpenShift Container Platform 웹 콘솔을 사용하여 Operator 서브스크립션에 로깅 수준을 설정할 수 있습니다.
Operator에서 사용 가능한 다른 로깅 수준은 다음과 같습니다.
error
- 로그에만 오류 메시지를 씁니다.
debug
- 디버깅 메시지를 포함하여 로그에 모든 메시지를 작성합니다.
프로세스
OpenShift Container Platform 명령줄 인터페이스 사용:
클러스터 관리자로 로그인합니다. 예를 들면 다음과 같습니다.
$ oc login -u system:admin
Operator가 설치되지 않은 경우 다음 단계를 완료하여 로깅 수준을 변경합니다.
-
다운로드 및 추출한 Operator 아카이브의
배포
디렉터리에서operator.yaml
파일을 엽니다. zap-log-level
속성 값을debug
또는error
로 변경합니다. 예를 들면 다음과 같습니다.apiVersion: apps/v1 kind: Deployment metadata: labels: control-plane: controller-manager name: amq-broker-controller-manager spec: containers: - args: - --zap-log-level=error ...
-
operator.yaml
파일을 저장합니다. - Operator를 설치합니다.
-
다운로드 및 추출한 Operator 아카이브의
Operator가 이미 설치된 경우
sed
명령을 사용하여deploy/operator.yaml
파일의 로깅 수준을 변경하고 Operator를 재배포합니다. 예를 들어 다음 명령은 로깅 수준을info
에서오류로
변경하고 Operator를 재배포합니다.$ sed 's/--zap-log-level=info/--zap-log-level=error/' deploy/operator.yaml | oc apply -f -
OpenShift Container Platform 웹 콘솔 사용:
- 클러스터 관리자로 OpenShift Container Platform에 로그인합니다.
- 왼쪽 창에서 → 를 클릭합니다.
- Red Hat Integration - AMQ Broker for RHEL 8 (Multiarch) Operator를 클릭합니다.
- 서브스크립션 탭을 클릭합니다.
- 작업을 클릭합니다.
- 서브스크립션 편집을 클릭합니다.
YAML 탭을 클릭합니다.
콘솔에서 YAML 편집기가 열리고 서브스크립션을 편집할 수 있습니다.
config
요소에서ARGS
라는 환경 변수를 추가하고 로깅 수준의info
,debug
또는error
를 지정합니다. 다음 예제에서는 로깅 수준의디버그
를 지정하는ARGS
환경 변수가 Operator 컨테이너로 전달됩니다.apiVersion: operators.coreos.com/v1alpha1 kind: Subscription spec: ... config: env: - name: ARGS value: "--zap-log-level=debug" ...
- 저장을 클릭합니다.
3.6. Operator의 리더 선택 설정 구성
AMQ Broker Operator가 리더 선택을 위해 사용하는 설정을 사용자 지정할 수 있습니다.
OpenShift Container Platform 명령줄 인터페이스를 사용하여 Operator를 설치하는 경우 설치 전이나 후에 Operator 구성 파일 operator.yaml
에서 리더 선택 설정을 구성할 수 있습니다. OperatorHub를 사용하는 경우 OpenShift Container Platform 웹 콘솔을 사용하여 설치 후 Operator 서브스크립션에서 리더 선택 설정을 구성할 수 있습니다.
프로세스
OpenShift Container Platform 웹 콘솔 사용:
- 클러스터 관리자로 OpenShift Container Platform에 로그인합니다.
- 왼쪽 창에서 → 를 클릭합니다.
- Red Hat Integration - AMQ Broker for RHEL 8 (Multiarch) Operator를 클릭합니다.
- 서브스크립션 탭을 클릭합니다.
- 작업을 클릭합니다.
- 서브스크립션 편집을 클릭합니다.
YAML 탭을 클릭합니다.
콘솔에서 YAML 편집기가 열리고 서브스크립션을 편집할 수 있습니다.
config
섹션에서ARGS
라는 환경 변수를 추가하고 변수 값에 리더 선택 설정을 지정합니다. 예를 들면 다음과 같습니다.apiVersion: operators.coreos.com/v1alpha1 kind: Subscription spec: .. config: env: - name: ARGS value: "--lease-duration=18 --renew-deadline=12 --retry-period=3"
저장을 클릭합니다.
- lease-duration
- Leader가 아닌 운영자가 이전 리더에 의해 갱신되지 않은 리스를 취득하기 전에 기다리는 기간(초)입니다. 기본값은 15입니다.
- renew-deadline
- 지속 시간(초)은 리더가 중지되기 전에 리더 역할을 갱신하려는 시도 사이에 대기합니다. 기본값은 10입니다.
- retry-period
- 운영자가 리더 역할을 확보하고 갱신하려는 시도 사이에 대기하는 기간(초)입니다. 기본값은 2입니다.
OpenShift Container Platform 명령줄 인터페이스 사용:
클러스터 관리자로 로그인합니다. 예를 들면 다음과 같습니다.
$ oc login -u system:admin
-
다운로드 및 추출한 operator 아카이브의
배포
디렉터리에서operator.yaml
파일을 엽니다. 리더 선택 설정 값을 설정합니다. 예를 들면 다음과 같습니다.
apiVersion: apps/v1 kind: Deployment ... template .. spec: containers: - args: - --lease-duration=60 - --renew-deadline=40 - --retry-period=5 ..
-
operator.yaml
파일을 저장합니다. Operator가 이미 설치된 경우 업데이트된 설정을 적용합니다.
$ oc apply -f deploy/operator.yaml
- Operator가 설치되지 않은 경우 Operator를 설치합니다.
3.7. 브로커 배포에 대한 상태 정보 보기
브로커 배포를 위해 OpenShift Container Platform에서 보고한 일련의 표준 조건의 상태를 볼 수 있습니다. 브로커 배포를 위해 CR(사용자 정의 리소스)에 제공된 추가 상태 정보를 볼 수도 있습니다.
프로세스
브로커 배포의 CR 인스턴스를 엽니다.
OpenShift 명령줄 인터페이스 사용:
- 브로커 배포의 프로젝트에서 CR을 볼 수 있는 권한이 있는 사용자로 OpenShift Container Platform에 로그인합니다.
배포에 대한 CR을 확인합니다.
oc get ActiveMQArtemis <CR instance name> -n <namespace> -o yaml
OpenShift Container Platform 웹 콘솔 사용:
- 브로커 배포를 위해 프로젝트에 CR을 배포할 권한이 있는 사용자로 콘솔에 로그인합니다.
- 왼쪽 창에서 → 를 클릭합니다.
- Red Hat Integration - AMQ Broker for RHEL 8 (Multiarch) Operator를 클릭합니다.
- ActiveMQ Artemis 탭을 클릭합니다.
- ActiveMQ Artemis 인스턴스의 이름을 클릭합니다.
브로커 배포에 대한 OpenShift Container Platform 조건의 상태를 확인합니다.
OpenShift 명령줄 인터페이스 사용:
-
CR의
status
섹션으로 이동하여조건
세부 정보를 확인합니다.
-
CR의
OpenShift Container Platform 웹 콘솔 사용:
세부 정보 탭에서
Conditions
섹션까지 아래로 스크롤합니다.조건에는 상태 및 유형이 있습니다. 또한 이유, 메시지 및 기타 세부 사항이 있을 수 있습니다. 조건이 충족되면 상태 값이
True
이고, 조건이 충족되지 않으면False
또는 조건 상태를 확인할 수 없는 경우Unknown
입니다.Valid
조건은 브로커 배포에 영향을 미치지 않는 구성에서 anomaly 플래그를 지정하는 데알 수 없는
상태도 있을 수 있습니다. 자세한 내용은 2.8절. “CR(사용자 정의 리소스)의 이미지 및 버전 구성 검증”의 내용을 참조하십시오.상태 정보는 다음 조건에 대해 제공됩니다.
표 3.1. 브로커 배포의 상태 정보 상태 이름 상태 표시… valid
CR의 검증입니다.
Valid
조건의 상태가False
인 경우 Operator는 조정을 완료하지 않고 false 상태를 초래한 문제를 먼저 해결할 때까지 StatefulSet을 업데이트하지 않습니다.배포됨
StatefulSet, Pod 및 기타 리소스의 가용성.
Ready
다른 보다 자세한 조건을 요약하는 최상위 조건입니다.
Ready
조건의 상태는 다른 조건이False
가 아닌 경우에만True
입니다.BrokerPropertiesApplied
brokerProperties
특성을 사용하는 CR에 구성된 속성입니다.BrokerPropertiesApplied
조건에 대한 자세한 내용은 2.4절. “CRD(사용자 정의 리소스 정의)에 노출되지 않은 항목 구성” 을 참조하십시오.JaasPropertiesApplied
CR에 구성된 JAAS(Java Authentication and Authorization Service) 로그인 모듈입니다.
JaasPropertiesApplied
조건에 대한 자세한 내용은 4.3.1절. “시크릿에서 JAAS 로그인 모듈 구성” 을 참조하십시오.
CR의
status
섹션에서 브로커 배포에 대한 추가 상태 정보를 확인합니다. 다음과 같은 추가 상태 정보가 표시됩니다.deploymentPlanSize
- 배포의 브로커 Pod 수입니다.
podstatus
- 배포에서 각 브로커 Pod의 상태 및 이름입니다.
version
- 배포된 브로커 및 init 컨테이너 이미지의 레지스트리 URL과 브로커의 버전 및 레지스트리 URL입니다.
업그레이드
Operator의 기능은 배포에 메이저, 마이너, 패치 및 보안 업데이트를 적용할 수 있습니다. CR의
spec.deploymentPlan.image
및spec.version
속성 값에 따라 결정됩니다.-
spec.deploymentPlan.image
속성이 브로커 컨테이너 이미지의 레지스트리 URL을 지정하는 경우 모든 업그레이드 유형의 상태는False
이므로 Operator는 기존 컨테이너 이미지를 업그레이드할 수 없습니다. spec.deploymentPlan.image
속성이 CR에 없거나자리 표시자
의 값이 있는 경우spec.version
속성의 구성은 다음과 같이업그레이드
상태에 영향을 미칩니다.-
spec.version
속성이 구성되어 있는지 여부에 관계없이securityUpdates
의 상태는True
입니다. -
spec.version
속성 값이 메이저 버전과 마이너 버전(예: '7.10')이 있는 경우patchUpdates
상태는True
이므로 Operator는 컨테이너 이미지의 최신 패치 버전으로 업그레이드할 수 있습니다. -
spec.version 속성
값에 주요 버전(예: '7')이 있는 경우minorUpdates
의 상태는True
이므로 Operator는 컨테이너 이미지의 최신 마이너 버전 및 패치 버전으로 업그레이드할 수 있습니다. -
spec.version
속성이 CR에 없는 경우majorUpdates
의 상태는True
이므로 이 버전을 사용할 수 있는 경우 7.x.x에서 8.x.x로의 업그레이드를 포함하여 사용 가능한 업그레이드를 배포할 수 있습니다.
-
-
4장. Operator 기반 브로커 배포 구성
4.1. Operator에서 브로커 구성을 생성하는 방법
사용자 정의 리소스(CR) 인스턴스를 사용하여 브로커 배포를 구성하기 전에 Operator에서 브로커 구성을 생성하는 방법을 이해해야 합니다.
Operator 기반 브로커 배포를 생성하면 각 브로커의 Pod가 OpenShift 프로젝트의 StatefulSet에서 실행됩니다. 브로커의 애플리케이션 컨테이너는 각 Pod 내에서 실행됩니다.
Operator는 각 Pod를 초기화할 때 Init Container 라는 컨테이너 유형을 실행합니다. OpenShift Container Platform에서 Init Container는 애플리케이션 컨테이너보다 먼저 실행되는 특수 컨테이너입니다. Init Container에는 애플리케이션 이미지에 없는 유틸리티 또는 설정 스크립트가 포함될 수 있습니다.
기본적으로 AMQ Broker Operator는 기본 제공 Init Container를 사용합니다. Init Container는 배포에 기본 CR 인스턴스를 사용하여 각 브로커 애플리케이션 컨테이너에서 사용하는 구성을 생성합니다.
CR에 주소 설정이 지정된 경우 Operator는 기본 구성을 생성한 다음 해당 구성을 CR에 지정된 구성과 병합하거나 교체합니다. 이 프로세스는 다음 섹션에 설명되어 있습니다.
4.1.1. Operator에서 주소 설정 구성을 생성하는 방법
배포에 대한 기본 CR(사용자 정의 리소스) 인스턴스에 주소 설정 구성이 포함된 경우 Operator는 아래에 설명된 대로 각 브로커에 대한 주소 설정 구성을 생성합니다.
Operator는 브로커 애플리케이션 컨테이너 전에 Init Container를 실행합니다. Init Container는 기본 주소 설정 구성을 생성합니다. 기본 주소 설정 구성은 다음과 같습니다.
<address-settings> <!-- if you define auto-create on certain queues, management has to be auto-create --> <address-setting match="activemq.management#"> <dead-letter-address>DLQ</dead-letter-address> <expiry-address>ExpiryQueue</expiry-address> <redelivery-delay>0</redelivery-delay> <!-- with -1 only the global-max-size is in use for limiting --> <max-size-bytes>-1</max-size-bytes> <message-counter-history-day-limit>10</message-counter-history-day-limit> <address-full-policy>PAGE</address-full-policy> <auto-create-queues>true</auto-create-queues> <auto-create-addresses>true</auto-create-addresses> <auto-create-jms-queues>true</auto-create-jms-queues> <auto-create-jms-topics>true</auto-create-jms-topics> </address-setting> <!-- default for catch all --> <address-setting match="#"> <dead-letter-address>DLQ</dead-letter-address> <expiry-address>ExpiryQueue</expiry-address> <redelivery-delay>0</redelivery-delay> <!-- with -1 only the global-max-size is in use for limiting --> <max-size-bytes>-1</max-size-bytes> <message-counter-history-day-limit>10</message-counter-history-day-limit> <address-full-policy>PAGE</address-full-policy> <auto-create-queues>true</auto-create-queues> <auto-create-addresses>true</auto-create-addresses> <auto-create-jms-queues>true</auto-create-jms-queues> <auto-create-jms-topics>true</auto-create-jms-topics> </address-setting> <address-settings>
- CR(사용자 정의 리소스) 인스턴스에서 주소 설정 구성도 지정한 경우 구성을 처리하고 XML로 변환합니다.
-
CR의
applyRule
속성 값에 따라 Init Container는 위에 표시된 기본 주소 설정 구성을 CR에 지정한 구성으로 병합 하거나 교체 합니다. 이 병합 또는 교체 결과는 브로커가 사용할 최종 주소 설정 구성입니다. -
Init Container가 브로커 구성(Address settings 포함) 생성을 완료하면 브로커 애플리케이션 컨테이너가 시작됩니다. 시작 시 브로커 컨테이너는 이전에 Init Container에서 사용한 설치 디렉터리에서 해당 구성을 복사합니다.
broker.xml
구성 파일에서 주소 설정 구성을 검사할 수 있습니다. 실행 중인 브로커의 경우 이 파일은/home/jboss/amq-broker/etc
디렉터리에 있습니다.
추가 리소스
-
CR에서
applyRule
속성을 사용하는 예는 4.2.2절. “주소 설정 구성” 를 참조하십시오.
4.1.2. 브로커 Pod의 디렉터리 구조
Operator 기반 브로커 배포를 생성하면 각 브로커의 Pod가 OpenShift 프로젝트의 StatefulSet에서 실행됩니다. 브로커의 애플리케이션 컨테이너는 각 Pod 내에서 실행됩니다.
Operator는 각 Pod를 초기화할 때 Init Container 라는 컨테이너 유형을 실행합니다. OpenShift Container Platform에서 Init Container는 애플리케이션 컨테이너보다 먼저 실행되는 특수 컨테이너입니다. Init Container에는 애플리케이션 이미지에 없는 유틸리티 또는 설정 스크립트가 포함될 수 있습니다.
브로커 인스턴스에 대한 구성을 생성할 때 Init Container는 기본 설치 디렉터리에 포함된 파일을 사용합니다. 이 설치 디렉터리는 Operator가 브로커 Pod에 마운트하는 볼륨과 Init Container 및 브로커 컨테이너 공유에 있습니다. Init Container에서 공유 볼륨을 마운트하는 데 사용하는 경로는 CONFIG_INSTANCE_DIR
이라는 환경 변수에 정의됩니다. CONFIG_INSTANCE_DIR
의 기본값은 /amq/init/config
입니다. 문서에서 이 디렉터리를 < install_dir>이라고 합니다
.
CONFIG_INSTANCE_DIR
환경 변수의 값은 변경할 수 없습니다.
기본적으로 설치 디렉터리에는 다음과 같은 하위 디렉터리가 있습니다.
하위 디렉터리 | 내용 |
---|---|
| 브로커를 실행하는 데 필요한 바이너리 및 스크립트입니다. |
| 구성 파일. |
| 브로커 저널입니다. |
| broker를 실행하는 데 필요한 root 및 라이브러리입니다. |
| 브로커 로그 파일. |
| 임시 웹 애플리케이션 파일. |
Init Container가 브로커 구성 생성을 완료하면 브로커 애플리케이션 컨테이너가 시작됩니다. 시작 시 브로커 컨테이너는 이전에 Init Container에서 사용한 설치 디렉터리에서 해당 구성을 복사합니다. 브로커 Pod가 초기화되고 실행되면 브로커의 /home/jboss/amq-broker
디렉터리(및 하위 디렉터리)에 브로커 구성이 있습니다.
추가 리소스
- Operator가 기본 제공 Init Container의 컨테이너 이미지를 선택하는 방법에 대한 자세한 내용은 2.7절. “Operator에서 컨테이너 이미지를 선택하는 방법” 을 참조하십시오.
- 사용자 정의 Init Container 이미지를 빌드하고 지정하는 방법을 알아보려면 4.11절. “사용자 정의 Init Container 이미지 지정” 를 참조하십시오.
4.2. Operator 기반 브로커 배포를 위한 주소 및 대기열 구성
4.2.1. 주소 및 큐 구성
브로커 배포에 ActiveMQArtemis
CR 인스턴스에서 brokerProperties
속성을 사용하여 주소 및 큐를 구성할 수 있습니다. 또는 ActiveMQArtemisAddress
CR에서 주소와 큐를 구성할 수 있습니다.
ActiveMQArtemisAddress
CR은 AMQ Broker 7.12에서 더 이상 사용되지 않습니다.
brokerProperties
를 사용하여 주소 및 대기열 구성
brokerProperties
속성 아래에 주소와 큐를 구성하고 사용자가 생성하는 각 큐에 대한 설정도 구성할 수 있습니다.
사전 요구 사항
기본 브로커 배포를 생성하셨습니다. 자세한 내용은 3.4.1절. “기본 브로커 인스턴스 배포”의 내용을 참조하십시오.
프로세스
-
브로커 배포에 사용할
ActiveMQArtemis
CR 인스턴스를 편집합니다. CR의
spec
섹션에서 CR에 아직 없는 경우brokerProperties
속성을 추가합니다.spec: ... brokerProperties: ...
형식으로 주소를 구성합니다.
- addressConfigurations.<주소 이름>.routingTypes=<라우팅 유형>
예를 들면 다음과 같습니다.
spec: ... brokerProperties: - addressConfigurations.usa-news-address.routingTypes=MULTICAST ...
형식으로 생성한 주소에 대한 큐를 구성합니다.
- addressConfigurations.<주소 이름>.queueConfigs.<큐 이름>.address<address>
중요.address
설정의 <address> 값은 생성한 각 큐에 대해 <주소 이름>과 일치해야 합니다. 이러한 값이 다른 경우 각각에 대해 별도의 주소가 생성됩니다. 다음 예에서 주소 이름과.address
설정의 모두usa-news-address
의 값과 동일합니다.spec: ... brokerProperties: - addressConfigurations.usa-news-address.queueConfigs.usa-news-queue.address=usa-news-address ...
형식으로 큐에 대해 구성할 각 설정에 대해 별도의 행을 추가합니다.
- addressConfigurations.<주소 이름>.queueConfigs.<큐 이름>.<큐 설정>
예를 들면 다음과 같습니다.
spec: ... brokerProperties: - addressConfigurations.usa-news-address.queueConfigs.usa-news-queue.routingType=ANYCAST - addressConfigurations.usa-news-address.queueConfigs.usa-news-queue.purgeOnNoConsumers=true - addressConfigurations.usa-news-address.queueConfigs.usa-news-queue.maxConsumers=20 ...
- CR을 저장합니다.
-
ActiveMQArtemis
CR의status
섹션을 검토하여brokerProperties
구성에서 오류가 감지되지 않았는지 확인합니다. 자세한 내용은 2.4절. “CRD(사용자 정의 리소스 정의)에 노출되지 않은 항목 구성”의 내용을 참조하십시오.
ActiveMQArtemisAddress
CR에서 주소 및 큐 구성
ActiveMQArtemisAddress
CR에서 주소와 큐를 구성할 수 있습니다. 브로커 배포에서 여러 주소 및/또는 큐를 구성하려면 별도의 CR 인스턴스를 생성하고 개별적으로 배포하여 각 경우에 새 주소 및/또는 큐 이름을 지정해야 합니다. 또한 각 CR 인스턴스의 name
속성은 고유해야 합니다.
사전 요구 사항
AMQ Broker Operator를 설치하여 브로커에 주소와 큐를 생성하는 데 필요한 CRD(사용자 정의 리소스 정의)를 설치했습니다. Operator를 설치하는 두 가지 대체 방법에 대한 자세한 내용은 다음을 참조하십시오.
- CR 인스턴스를 사용하여 기본 브로커 배포를 생성하는 방법을 잘 알고 있습니다. 자세한 내용은 3.4.1절. “기본 브로커 인스턴스 배포”의 내용을 참조하십시오.
프로세스
브로커 배포에 대한 주소 및 큐를 정의하도록 CR(사용자 정의 리소스) 인스턴스 구성을 시작합니다.
OpenShift 명령줄 인터페이스 사용:
브로커 배포를 위해 프로젝트에 CR을 배포할 수 있는 권한이 있는 사용자로 OpenShift에 로그인합니다.
oc login -u <user> -p <password> --server=<host:port>
-
다운로드 및 추출한 Operator 설치 아카이브의
deploy/crs
디렉터리에 포함된broker_activemqartemisaddress_cr.yaml
이라는 샘플 CR 파일을 엽니다.
OpenShift Container Platform 웹 콘솔 사용:
- 브로커 배포를 위해 프로젝트에 CR을 배포할 권한이 있는 사용자로 콘솔에 로그인합니다.
- 주소 CRD를 기반으로 새 CR 인스턴스를 시작합니다. 왼쪽 창에서 → 를 클릭합니다.
- ActiveMQArtemisAddresss CRD를 클릭합니다.
- Instances 탭을 클릭합니다.
Create ActiveMQArtemisAddress 를 클릭합니다.
콘솔에서 YAML 편집기가 열리고 CR 인스턴스를 구성할 수 있습니다.
CR의
spec
섹션에서 주소, 큐 및 라우팅 유형을 정의하는 행을 추가합니다. 예를 들면 다음과 같습니다.apiVersion: broker.amq.io/v1beta1 kind: ActiveMQArtemisAddress metadata: name: myAddressDeployment0 namespace: myProject spec: ... addressName: myAddress0 queueName: myQueue0 routingType: anycast ...
이전 구성은
myQueue0
큐와anycast
라우팅 유형으로myAddress0
이라는 주소를 정의합니다.참고metadata
섹션에는namespace
속성을 포함하고 OpenShift Container Platform 웹 콘솔을 사용하여 CR 인스턴스를 생성하는 경우에만 값을 지정해야 합니다. 지정해야 하는 값은 브로커 배포를 위한 OpenShift 프로젝트의 이름입니다.CR 인스턴스를 배포합니다.
OpenShift 명령줄 인터페이스 사용:
- CR 파일을 저장합니다.
브로커 배포를 위해 프로젝트로 전환합니다.
$ oc project <project_name>
CR 인스턴스를 생성합니다.
$ oc create -f <path/to/address_custom_resource_instance>.yaml
OpenShift 웹 콘솔 사용:
- CR 구성을 완료하면 생성 을 클릭합니다.
4.2.2. 주소 설정 구성
주소 설정 그룹을 구성하고 다음 방법 중 하나를 사용하여 설정을 적용하는 주소 기준을 지정할 수 있습니다.
-
브로커 배포에
ActiveMQArtemis
CR 인스턴스에서brokerProperties
속성을 사용하여 주소를 구성하는 경우brokerProperties
속성에서 주소 설정을 구성할 수도 있습니다. -
ActiveMQArtemisAddress
CR 인스턴스에서 주소를 구성하는 경우ActiveMQArtemis
CR의addressSettings
섹션에서 주소 설정을 구성할 수 있습니다.
다음 예제에서는 두 방법을 모두 사용하여 특정 주소 패턴에 대해 dead letter address 및 queue를 구성하는 방법을 보여줍니다. 브로커에서 dead letter address 및 queue를 사용하여 무한 전송 시도를 방지하기 위해 클라이언트에 전달할 수 없는 메시지를 저장할 수 있습니다. 시스템 관리자는 나중에 dead letter queue에서 전달되지 않은 메시지를 사용하여 메시지를 검사할 수 있습니다.
사전 요구 사항
-
브로커를 배포하기 위해
ActiveMQArtemis
CR 인스턴스를 생성하셨습니다. 자세한 내용은 3.4.1절. “기본 브로커 인스턴스 배포”의 내용을 참조하십시오. - Operator가 병합하거나 CR 인스턴스에 지정된 구성으로 교체하는 기본 주소 설정 구성에 대해 잘 알고 있습니다. 자세한 내용은 4.1.1절. “Operator에서 주소 설정 구성을 생성하는 방법”의 내용을 참조하십시오.
brokerProperties
를 사용하여 주소 설정 구성
-
브로커 배포에 사용할
ActiveMQArtemis
CR 인스턴스를 편집합니다. 배달되지 않은 메시지를 수신하기 위해 dead letter address 및 queue를 만듭니다. 예를 들면 다음과 같습니다.
spec: ... brokerProperties: ... - addressConfigurations.usDeadLetter.routingTypes=MULTICAST - addressConfigurations.usDeadLetter.queueConfigs.usDeadLetter-queue.address=usDeadLetter
brokerProperties
를 사용하여 주소 및 큐 생성에 대한 자세한 내용은 4.2.1절. “주소 및 큐 구성” 을 참조하십시오.addressSettings.< 주소이름>.< 주소 설정 > 의
brokerProperties
속성 아래에 별도의 행을 추가합니다.- 생성된 dead letter address를 dead letter address로 설정합니다.
배달 시도 횟수를 지정한 후 일치하는 주소로 전달할 수 없는 메시지를 dead letter 주소로 보냅니다.
예를 들면 다음과 같습니다.
spec: ... brokerProperties: ... - addressSettings.usa-news.deadLetterAddress=usDeadLetter - addressSettings.usa-news.maxDeliveryAttempts=5 ...
별표(*) 또는 숫자 기호(#) 문자를 와일드카드로 사용하여 주소 패턴을 만들 수 있습니다. 패턴의 일치는 마침표(.)로 표시되는 각 구분 기호 경계에서 수행됩니다. 숫자 기호 문자는 0개 이상의 단어와 일치하며 주소 문자열 끝에 사용할 수 있습니다. 별표 문자는 단일 단어와 일치하며 address 문자열 내의 모든 위치에서 사용할 수 있습니다. 예를 들면 다음과 같습니다.
spec: ... brokerProperties: ... - addressSettings."usa-news.*".deadLetterAddress=usDeadLetter - addressSettings."europe-news.#".deadLetterAddress=euDeadLetter ...
이전 예에서 다음 주소가 일치합니다.
-
usa-news.*
주소 패턴은usa-news.domestic
및usa-news.
intlusa-news.domestic.politics
. europe-news.#
주소 패턴은 europe-news ,europe-news
.politics 및europe-news
.politicsfr과 같이 europe-news
로 시작하는 모든 주소와 일치합니다.참고brokerProperties
항목에서 마침표(.)는 예약된 문자입니다. 마침표가 포함된 주소 패턴을 만들려면 주소를 따옴표로 묶어야 합니다. 예: "usa-news.*"
- CR을 저장합니다.
-
ActiveMQArtemis
CR의status
섹션을 검토하여brokerProperties
구성에서 오류가 감지되지 않았는지 확인합니다. 자세한 내용은 2.4절. “CRD(사용자 정의 리소스 정의)에 노출되지 않은 항목 구성”의 내용을 참조하십시오.
ActiveMQArtemis
CR 인스턴스에서 addressSettings
를 사용하여 주소 설정 구성
ActiveMQArtemisAddress
CR에 dead letter address 및 queue를 구성한 경우 브로커 배포에 대한 ActiveMQArtemis
CR 인스턴스에서 전달 시도를 제한하도록 설정을 구성할 수 있습니다.
사전 요구 사항
다음 세부 정보를 사용하여 주소와 큐를 생성했습니다.
addressName: myDeadLetterAddress
queueName: myDeadLetterQueue
routingType: anycast
주소 및 큐 생성에 대한 자세한 내용은 다음을 참조하십시오. 4.2.1절. “주소 및 큐 구성”
프로세스
브로커 배포에 사용할
ActiveMQArtemis
CR 인스턴스를 편집합니다.oc edit ActiveMQArtemis <CR instance name> -n <namespace>
- OpenShift Container Platform 웹 콘솔 사용:
- 브로커 배포를 위해 프로젝트에 CR을 배포할 권한이 있는 사용자로 콘솔에 로그인합니다.
- 왼쪽 창에서 → 를 클릭합니다.
- Red Hat Integration - AMQ Broker for RHEL 8 (Multiarch) Operator를 클릭합니다.
- AMQ Broker 탭을 클릭합니다.
- ActiveMQArtemis 인스턴스 이름의 이름을 클릭합니다.
YAML 탭을 클릭합니다.
콘솔에서 YAML 편집기가 열리고 CR 인스턴스를 편집할 수 있습니다.
참고metadata
섹션에는namespace
속성을 포함하고 OpenShift Container Platform 웹 콘솔을 사용하여 CR 인스턴스를 생성하는 경우에만 값을 지정해야 합니다. 지정해야 하는 값은 브로커 배포를 위한 OpenShift 프로젝트의 이름입니다.CR의
spec
섹션에서 다음과 같이 단일addressSetting
섹션이 포함된 새addressSettings
섹션을 추가합니다.spec: ... addressSettings: addressSetting:
addressSetting
블록에match
속성의 단일 인스턴스를 추가합니다. 주소 일치 표현식을 지정합니다. 예를 들면 다음과 같습니다.spec: ... addressSettings: addressSetting: - match: myAddress
match
-
브로커가 다음 구성을 적용하는 주소 또는 주소를 지정합니다. 이 예제에서
match
속성의 값은myAddress
라는 단일 주소에 해당합니다.
전달되지 않은 메시지와 관련된 속성을 추가하고 값을 지정합니다. 예를 들면 다음과 같습니다.
spec: ... addressSettings: addressSetting: - match: myAddress deadLetterAddress: myDeadLetterAddress maxDeliveryAttempts: 5
deadLetterAddress
- 브로커가 전달되지 않은 메시지를 보내는 주소입니다.
maxDeliveryAttempts
구성된 dead letter 주소로 메시지를 이동하기 전에 브로커가 수행하는 최대 전달 시도 수입니다.
이전 예에서 브로커가
myAddress
로 시작하는 주소로 5번 메시지를 전달하려고 하면 브로커는 지정된 dead letter address인myDeadLetterAddress
로 메시지를 이동합니다.
(선택 사항) 다른 주소 또는 주소 집합에 유사한 구성을 적용합니다. 예를 들면 다음과 같습니다.
spec: ... addressSettings: addressSetting: - match: myAddress deadLetterAddress: myDeadLetterAddress maxDeliveryAttempts: 5 - match: 'myOtherAddresses#' deadLetterAddress: myDeadLetterAddress maxDeliveryAttempts: 3
이 예제에서 두 번째
match
속성 값에는 해시 와일드카드 문자가 포함됩니다. 와일드카드 문자는 이전 구성이myOtherAddresses
문자열로 시작하는 모든 주소에 적용됨을 의미합니다.참고와일드카드 표현식을
match
속성의 값으로 사용하는 경우, 값을 작은따옴표로 묶어야 합니다(예:'myOtherAddresses#'
).addressSettings
섹션의 시작 부분에applyRule
속성을 추가하고 값을 지정합니다. 예를 들면 다음과 같습니다.spec: ... applyRule: merge_all addressSetting: - match: myAddress deadLetterAddress: myDeadLetterAddress maxDeliveryAttempts: 5 - match: 'myOtherAddresses#' deadLetterAddress: myDeadLetterAddress maxDeliveryAttempts: 3
applyRule
속성은 Operator가 일치하는 주소 또는 주소 집합에 대해 CR에 추가하는 구성을 적용하는 방법을 지정합니다. 지정할 수 있는 값은 다음과 같습니다.merge_all
CR 및 기본 구성에 모두 지정된 주소 설정의 경우 동일한 주소 또는 주소 집합과 일치하는 기본 구성입니다.
- 기본 구성에 지정된 속성 값을 CR에 지정된 속성 값으로 바꿉니다.
- CR 또는 기본 구성에 고유하게 지정된 속성 값을 유지합니다. 각 항목을 최종 병합된 구성에 포함합니다.
- CR 또는 특정 주소 또는 주소 집합과 일치하는 기본 구성에 지정된 주소 설정의 경우 이를 최종 병합된 구성에 포함합니다.
merge_replace
- CR 및 동일한 주소 또는 주소 집합과 일치하는 기본 구성에 지정된 주소 설정의 경우 CR 에 지정된 설정을 최종 병합된 구성에 포함합니다. CR에 지정되지 않은 경우에도 기본 구성에 지정된 속성은 포함하지 마십시오.
- CR 또는 특정 주소 또는 주소 집합과 일치하는 기본 구성에 지정된 주소 설정의 경우 이를 최종 병합된 구성에 포함합니다.
replace_all
- 기본 구성에 지정된 모든 주소 설정을 CR에 지정된 주소로 바꿉니다. 최종 병합 구성은 CR에 지정된 것과 정확히 일치합니다.
참고CR에
applyRule
속성을 명시적으로 포함하지 않으면 Operator는 기본값merge_all
을 사용합니다.- CR 인스턴스를 저장합니다.
4.2.2.1. 구성 가능한 주소 및 큐 설정
일반적으로 OpenShift Container Platform에서 브로커 배포를 위해 구성할 수 있는 주소 및 큐 설정은 Linux 또는 Windows의 독립 실행형 브로커 배포와 완전히 동일합니다. 그러나 이러한 설정을 구성하는 방법의 몇 가지 차이점을 알고 있어야 합니다. 이러한 차이점은 다음 하위 섹션에 설명되어 있습니다.
-
OpenShift Container Platform에서 브로커 배포에 대한 주소 및 큐 설정을 구성하려면 브로커 배포의 기본 CR(사용자 정의 리소스) 인스턴스의
addressSettings
섹션에 구성을 추가합니다. 이는 Linux 또는 Windows의 독립 실행형 배포와 대조됩니다. 이 배포는broker.xml
구성 파일의address-settings
요소에 구성을 추가합니다. 구성 항목 이름에 사용되는 형식은 OpenShift Container Platform과 독립 실행형 브로커 배포 간에 다릅니다. OpenShift Container Platform 배포의 경우 구성 항목 이름은 camel 경우입니다 (예:
defaultQueueRoutingType
). 반대로 독립 실행형 배포의 구성 항목 이름은 소문자이며 대시(--) 구분 기호(예:default
)를 사용합니다.-
queue-routing-type다음 표에서는 이 이름 지정 차이에 대한 몇 가지 추가 예를 보여줍니다.
표 4.2. 구성 항목의 이름의 차이점 예 독립 실행형 브로커 배포를 위한 구성 항목 OpenShift 브로커 배포를 위한 구성 항목 address-full-policy
addressFullPolicy
auto-create-queues
autoCreateQueues
default-queue-routing-type
defaultQueueRoutingType
last-value-queue
lastValueQueue
추가 리소스
OpenShift Container Platform 브로커 배포에 대한 주소 및 대기열 및 일치하는 설정을 생성하는 예는 다음을 참조하십시오.
- OpenShift Container Platform 브로커 배포의 주소, 큐 및 주소 설정에 대한 모든 구성 옵션에 대한 자세한 내용은 8.1절. “사용자 정의 리소스 구성 참조” 을 참조하십시오.
- 독립 실행형 브로커 배포를 위한 주소, 큐 및 관련 주소 설정에 대한 포괄적인 정보는 AMQ Broker 구성에서 주소 및 큐 구성을 참조하십시오. 이 정보를 사용하여 OpenShift Container Platform의 브로커 배포에 대해 동등한 구성을 생성할 수 있습니다.
4.2.3. 주소 및 큐 삭제
주소 및 큐를 생성하는 방법에 따라 브로커 배포에 대해 ActiveMQArtemis CR에서 brokerProperties
항목을 제거하거나
CR을 사용하여 주소와 큐를 삭제할 수 있습니다.
ActiveMQArtemis
Address
brokerProperties
를 사용하여 생성된 주소 및 큐 삭제
brokerProperties
속성의 에서 항목을 제거하여 개별 주소 및 큐를 삭제할 수 있습니다.
사전 요구 사항
- 기본 브로커 배포를 생성하셨습니다. 자세한 내용은 3.4.1절. “기본 브로커 인스턴스 배포”의 내용을 참조하십시오.
프로세스
-
브로커 배포에 사용할
ActiveMQArtemis
CR 인스턴스를 편집합니다. 다음
brokerProperties
항목을 추가하여 브로커가 숫자 기호(#) 및 CR에서 더 이상 찾을 수 없는 연결된 큐로 표시되는 주소를 삭제할 수 있습니다.spec: ... brokerProperties: - addressSettings.#.configDeleteAddresses=FORCE - addressSettings.#.configDeleteQueues=FORCE ...
brokerProperties
속성에서 제거할 주소와 큐를 참조하는 모든 행을 삭제합니다. 예를 들어usa-news
주소를 참조하는 모든 행을 삭제하여 이 주소와 큐를 제거합니다.spec: ... brokerProperties: - addressConfigurations.usa-news.queueConfigs.usa-news-queue.routingType=MULTICAST - addressConfigurations.usa-news.queueConfigs.usa-news-queue.purgeOnNoConsumers=true - addressConfigurations.usa-news.queueConfigs.usa-news-queue.maxConsumers=20 ...
CR을 저장합니다.
브로커가 업데이트된 구성을 적용하면 CR에서 제거한 주소와 큐를 삭제합니다.
ActiveMQArtemisAddress
CR에서 주소 및 큐 삭제
CR에서 주소와 큐를 생성한 경우 ActiveMQArtemisAddress
CR에서 주소 및 큐를 삭제할 수 있습니다.
프로세스
삭제할 주소 및 큐의
이름
,addressName
및queueName
과 같은 세부 정보가 있는 주소 CR 파일이 있는지 확인합니다. 예를 들면 다음과 같습니다.apiVersion: broker.amq.io/v1beta1 kind: ActiveMQArtemisAddress metadata: name: myAddressDeployment0 namespace: myProject spec: ... addressName: myAddress0 queueName: myQueue0 routingType: anycast ...
address CR의
spec
섹션에서removeFromBrokerOnDelete
속성을 추가하고true
값으로 설정합니다... spec: addressName: myAddress1 queueName: myQueue1 routingType: anycast removeFromBrokerOnDelete: true
removeFromBrokerOnDelete
속성을true
로 설정하면 주소 CR을 삭제할 때 Operator에서 배포의 모든 브로커에 대한 주소 및 관련 메시지가 제거됩니다.업데이트된 주소 CR을 적용하여 삭제하려는 주소에 대한
removeFromBrokerOnDelete
속성을 설정합니다.$ oc apply -f <path/to/address_custom_resource_instance>.yaml
주소 CR을 삭제하여 배포의 브로커에서 주소를 삭제합니다.
$ oc delete -f <path/to/address_custom_resource_instance>.yaml
추가 리소스
- OpenShift Container Platform 브로커 배포의 주소, 큐 및 주소 설정에 대한 모든 구성 옵션에 대한 자세한 내용은 8.1절. “사용자 정의 리소스 구성 참조” 을 참조하십시오.
OpenShift CLI(명령줄 인터페이스)를 사용하여 AMQ Broker Operator를 설치한 경우 다운로드 및 추출한 설치 아카이브에는 주소 설정 구성에 대한 몇 가지 추가 예가 포함되어 있습니다. 설치 아카이브의
deploy/examples
폴더에서 다음을 참조하십시오.-
artemis-basic-address-settings-deployment.yaml
-
artemis-merge-replace-address-settings-deployment.yaml
-
artemis-replace-address-settings-deployment.yaml
-
- 독립 실행형 브로커 배포를 위한 주소, 큐 및 관련 주소 설정에 대한 포괄적인 정보는 AMQ Broker 구성에서 주소 및 큐 구성을 참조하십시오. 이 정보를 사용하여 OpenShift Container Platform의 브로커 배포에 대해 동등한 구성을 생성할 수 있습니다.
- OpenShift Container Platform의 Init Container에 대한 자세한 내용은 OpenShift Container Platform 설명서에 Pod를 배포하기 전에 Init Container를 사용하여 작업을 수행합니다.
4.3. 인증 및 권한 부여 구성
기본적으로 AMQ Broker는 JAAS(Java Authentication and Authorization Service) 속성 로그인 모듈을 사용하여 사용자를 인증하고 권한을 부여합니다. 기본 JAAS 로그인 모듈에 대한 구성은 각 브로커 Pod의 /home/jboss/amq-broker/etc/login.config
파일에 저장되고 동일한 디렉터리의 artemis-users.properties
및 artemis-roles.properties 파일에서
사용자 및 역할 정보를 읽습니다. ActiveMQArtemisSecurity
CR(사용자 정의 리소스)을 업데이트하여 기본 로그인 모듈의 속성 파일에 사용자 및 역할 정보를 추가합니다.
기본 속성 파일에 사용자 및 역할 정보를 추가하기 위해 ActiveMQArtemisSecurity
CR을 업데이트하는 대신 시크릿에서 JAAS 로그인 모듈을 하나 이상 구성하는 것입니다. 이 시크릿은 각 브로커 Pod에 파일로 마운트됩니다. 시크릿에서 JAAS 로그인 모듈을 구성하면 ActiveMQArtemisSecurity
CR을 사용하여 사용자 및 역할 정보를 추가하는 것보다 다음과 같은 이점이 있습니다.
- 시크릿에 속성 로그인 모듈을 구성하는 경우 브로커는 속성 파일을 업데이트할 때마다 다시 시작할 필요가 없습니다. 예를 들어 속성 파일에 새 사용자를 추가하고 시크릿을 업데이트하면 브로커를 다시 시작할 필요 없이 변경 사항이 적용됩니다.
-
ActiveMQArtemisSecurity
CRD에 정의되지 않은 JAAS 로그인 모듈을 구성하여 사용자를 인증할 수 있습니다. 예를 들어 LDAP 로그인 모듈 또는 기타 JAAS 로그인 모듈을 구성할 수 있습니다.
AMQ Broker에 대한 인증 및 권한 부여 방법 모두 다음 섹션에 설명되어 있습니다.
4.3.1. 시크릿에서 JAAS 로그인 모듈 구성
AMQ Broker를 사용하여 사용자를 인증하도록 시크릿에서 JAAS 로그인 모듈을 구성할 수 있습니다. 시크릿을 생성한 후 기본 브로커 CR(사용자 정의 리소스)의 보안에 대한 참조를 추가하고 AMQ Broker에 대한 액세스 권한을 부여하도록 CR의 권한도 구성해야 합니다.
프로세스
새로운 JAAS 로그인 모듈 구성으로 텍스트 파일을 만들고 파일을
login.config
로 저장합니다. 파일을login.config
로 저장하면 텍스트 파일에서 생성한 시크릿에 올바른 키가 삽입됩니다. 다음은 로그인 모듈 구성의 예입니다.activemq { org.apache.activemq.artemis.spi.core.security.jaas.PropertiesLoginModule sufficient reload=true org.apache.activemq.jaas.properties.user="new-users.properties" org.apache.activemq.jaas.properties.role="new-roles.properties"; org.apache.activemq.artemis.spi.core.security.jaas.PropertiesLoginModule sufficient reload=false org.apache.activemq.jaas.properties.user="artemis-users.properties" org.apache.activemq.jaas.properties.role="artemis-roles.properties" baseDir="/home/jboss/amq-broker/etc"; };
시크릿에 JAAS 로그인 모듈을 구성하고 CR의 보안에 대한 참조를 추가하면 기본 로그인 모듈이 더 이상 AMQ Broker에서 사용되지 않습니다. 그러나 기본 로그인 모듈에서 참조되는
artemis-users.properties
파일의 사용자는 브로커로 인증하기 위해 Operator에 필요합니다. 새 JAAS 로그인 모듈을 구성한 후 Operator가 브로커로 인증할 수 있도록 하려면 다음 중 하나를 수행해야 합니다.-
위의 예와 같이 새 로그인 모듈 구성에 기본 속성 로그인 모듈을 포함합니다. 이 예제에서 기본 속성 로그인 모듈은
artemis-users.properties
및artemis-roles.properties
파일을 사용합니다. 새 로그인 모듈 구성에 기본 로그인 모듈을 포함하는 경우baseDir
을 각 브로커 Pod의 기본 속성 파일이 포함된/home/jboss/amq-broker/etc
디렉터리로 설정해야 합니다. Operator에서 브로커로 인증하는 데 필요한 사용자 및 역할 정보를 새 로그인 모듈 구성에서 참조하는 속성 파일에 추가합니다. 브로커 Pod의
/home/jboss/amq-broker/etc 디렉터리에 있는 기본
파일에서 이 정보를 복사할 수 있습니다.artemis-users.properties
및artemis-
roles.properties참고로그인 모듈에서 참조된 속성 파일은 브로커가 로그인 모듈을 처음 호출할 때만 로드됩니다. 브로커는 사용자를 인증할 로그인 모듈을 찾을 때까지
login.config
파일에 나열된 순서대로 로그인 모듈을 호출합니다.login.config
파일 끝에 Operator에서 사용하는 인증 정보가 포함된 login 모듈을 배치하면 브로커가 Operator를 인증할 때 이전의 모든 로그인 모듈이 호출됩니다. 결과적으로 속성 파일이 브로커에 표시되지 않음을 나타내는 상태 메시지가 지워집니다.
-
위의 예와 같이 새 로그인 모듈 구성에 기본 속성 로그인 모듈을 포함합니다. 이 예제에서 기본 속성 로그인 모듈은
생성한
login.config
파일에 properties 로그인 모듈이 포함된 경우 모듈에 지정된 사용자 및 역할 파일에 사용자 및 역할 정보가 포함되어 있는지 확인합니다. 예를 들면 다음과 같습니다.- new-users.properties
ruben=ruben01! anne=anne01! rick=rick01! bob=bob01!
- new-roles.properties
admin=ruben, rick group1=bob group2=anne
oc create secret
명령을 사용하여 새 로그인 모듈 구성으로 생성한 텍스트 파일에서 시크릿을 생성합니다. 로그인 모듈 구성에 properties 로그인 모듈이 포함된 경우 시크릿에 연결된 사용자 및 역할 파일도 포함됩니다. 예를 들면 다음과 같습니다.oc create secret generic custom-jaas-config --from-file=login.config --from-file=new-users.properties --from-file=new-roles.properties
참고Operator가 로그인 모듈 구성이 포함되어 있음을 인식하고 각 브로커 Pod에 업데이트를 전파할 수 있도록 시크릿 이름에
-jaas-config
접미사가 있어야 합니다.시크릿 생성 방법에 대한 자세한 내용은 Kubernetes 문서의 시크릿을 참조하십시오. https://kubernetes.io/docs/concepts/configuration/secret/
브로커 배포의 CR(사용자 정의 리소스) 인스턴스에 생성한 시크릿을 추가합니다.
OpenShift 명령줄 인터페이스 사용:
- 브로커 배포를 위해 프로젝트에 CR을 배포할 수 있는 권한이 있는 사용자로 OpenShift에 로그인합니다.
배포에 사용할 CR을 편집합니다.
oc edit ActiveMQArtemis <CR instance name> -n <namespace>
OpenShift Container Platform 웹 콘솔 사용:
- 브로커 배포를 위해 프로젝트에 CR을 배포할 권한이 있는 사용자로 콘솔에 로그인합니다.
- 왼쪽 창에서 → 를 클릭합니다.
- Red Hat Integration - AMQ Broker for RHEL 8 (Multiarch) Operator를 클릭합니다.
- AMQ Broker 탭을 클릭합니다.
- ActiveMQArtemis 인스턴스 이름의 이름을 클릭합니다.
YAML 탭을 클릭합니다.
콘솔에서 YAML 편집기가 열리고 CR 인스턴스를 구성할 수 있습니다.
extraMounts
요소 및secrets
요소를 생성하고 시크릿 이름을 추가합니다. 다음 예제에서는custom-jaas-config
라는 시크릿을 CR에 추가합니다.deploymentPlan: ... extraMounts: secrets: - "custom-jaas-config" ...
CR에서 브로커에 구성된 역할에 권한을 부여합니다.
CR의
spec
섹션에brokerProperties
요소를 추가하고 권한을 추가합니다. 단일 주소에 대한 역할 권한을 부여할 수 있습니다. 또는#
기호를 사용하여 와일드카드를 지정하여 모든 주소에 역할 권한을 부여할 수 있습니다. 예를 들면 다음과 같습니다.spec: ... brokerProperties: - securityRoles.#.group2.send=true - securityRoles.#.group1.consume=true - securityRoles.#.group1.createAddress=true - securityRoles.#.group1.createNonDurableQueue=true - securityRoles.#.group1.browse=true ...
이 예제에서 group2 역할에는 모든 주소에 대한
send
권한이 할당되고 group1 역할은consume
,createAddress
,createNonDurableQueue
를 할당하고 모든 주소에 대한 권한을찾습니다
.참고Java 속성 파일에서 콜론(:)은 키/값 쌍의 키와 값을 구분하는 데 사용되는 예약된 문자입니다. 주소 이름과 콜론(::)으로 구분된 큐 이름으로 구성된 정규화된 큐 이름(FQQN)에 권한을 부여하려면 FQQN에서 콜론(\) 문자를 이스케이프하려면 백슬래시(\) 문자를 사용해야 합니다. 예를 들면 다음과 같습니다.
spec: ... brokerProperties: - 'securityRoles."my-address\:\:my-queue".group2.send=true'
CR을 저장합니다.
Operator는 각 Pod의
/amq/extra/secrets/시크릿 이름
디렉터리에 있는 시크릿에login.config
login.config
파일 대신 마운트된 login.config 파일을 읽도록 브로커 JVM을 구성합니다.login.config
파일에 properties 로그인 모듈이 포함된 경우 참조된 사용자 및 역할 속성 파일도 각 Pod에 마운트됩니다.CR에서 상태 정보를 보고 배포의 브로커가 인증을 위해 시크릿에서 JAAS 로그인 모듈을 사용하고 있는지 확인합니다.
OpenShift 명령줄 인터페이스 사용:
브로커의 CR에서 상태 조건을 가져옵니다.
$ oc get activemqartemis -o yaml
OpenShift 웹 콘솔 사용:
-
CR에서
status
섹션으로 이동합니다.
-
CR에서
상태 정보에서 브로커가 시크릿에 구성된 JAAS 로그인 모듈을 사용하고 있음을 나타내는
JaasPropertiesApplied
유형이 있는지 확인합니다. 예를 들면 다음과 같습니다.- lastTransitionTime: "2023-02-06T20:50:01Z" message: "" reason: Applied status: "True" type: JaasPropertiesApplied
시크릿의 파일을 업데이트할 때 OpenShift Container Platform이 시크릿의 최신 파일을 각 브로커 포드에 전파할 때까지
reason
필드의 값이OutofSync
로 표시됩니다. 예를 들어 new 사용자를new-users-properties
파일에 추가하고 보안을 업데이트하는 경우 업데이트된 파일이 각 Pod로 전파될 때까지 다음 상태 정보가 표시됩니다.- lastTransitionTime: "2023-02-06T20:55:20Z" message: 'new-users.properties status out of sync, expected: 287641156, current: 2177044732' reason: OutOfSync status: "False" type: JaasPropertiesApplied
시크릿에서 참조되는 속성 파일에서 사용자 또는 역할 정보를 업데이트할 때
oc set data
명령을 사용하여 보안을 업데이트합니다.login.config
파일을 포함하여 시크릿에 대한 모든 파일을 다시 읽어야 합니다. 예를 들어 이 절차의 앞부분에서 생성한new-users.properties
파일에 새 사용자를 추가하는 경우 다음 명령을 사용하여custom-jaas-config
시크릿을 업데이트합니다.oc set data secret/custom-jaas-config --from-file=login.config=login.config --from-file=new-users.properties=new-users.properties --from-file=new-roles.properties=new-roles.properties
브로커 JVM은 시작할 때만 login.config
파일에서 구성을 읽습니다. login.config
파일에서 구성을 변경하고 새 로그인 모듈을 추가하고 시크릿을 업데이트하면 브로커는 브로커가 다시 시작될 때까지 새 구성을 사용하지 않습니다.
추가 리소스
8.3절. “예: Red Hat Single Sign-On을 사용하도록 AMQ 브로커 구성”
JAAS 로그인 모듈 형식에 대한 자세한 내용은 JAAS 로그인 구성 파일을 참조하십시오.
4.3.2. 보안 사용자 정의 리소스(CR)를 사용하여 기본 JAAS 로그인 모듈 구성
ActiveMQArtemisSecurity
CR(사용자 정의 리소스)을 사용하여 기본 JAAS 속성 로그인 모듈에서 사용자 및 역할 정보를 구성하여 AMQ Broker를 사용하여 사용자를 인증할 수 있습니다. 시크릿을 사용하여 AMQ Broker에서 인증 및 권한 부여를 구성하는 다른 방법은 4.3.1절. “시크릿에서 JAAS 로그인 모듈 구성” 를 참조하십시오.
ActiveMQArtemisSecurity
CR은 AMQ Broker 7.12부터 더 이상 사용되지 않습니다.
4.3.2.1. 보안 사용자 정의 리소스(CR)를 사용하여 기본 JAAS 로그인 모듈 구성
다음 절차에서는 보안 사용자 정의 리소스(CR)를 사용하여 기본 JAAS 로그인 모듈을 구성하는 방법을 보여줍니다.
사전 요구 사항
AMQ Broker Operator가 이미 설치되어 있어야 합니다. Operator를 설치하는 두 가지 대체 방법에 대한 자세한 내용은 다음을 참조하십시오.
- 브로커 보안 ( SecuringBroker)에 설명된대로 브로커 보안에 익숙해야합니다.
브로커 배포를 생성하기 전이나 후에 보안 CR을 배포할 수 있습니다. 그러나 브로커 배포를 생성한 후 보안 CR을 배포하면 브로커 Pod가 새 구성을 수락하도록 다시 시작됩니다.
브로커 배포에 대한 사용자 및 관련 보안 구성을 정의하도록 CR(사용자 정의 리소스) 인스턴스 구성을 시작합니다.
OpenShift 명령줄 인터페이스 사용:
브로커 배포를 위해 프로젝트에 CR을 배포할 수 있는 권한이 있는 사용자로 OpenShift에 로그인합니다.
oc login -u <user> -p <password> --server=<host:port>
배포에 사용할 CR을 편집합니다.
oc edit ActiveMQArtemis <CR instance name> -n <namespace>
OpenShift Container Platform 웹 콘솔 사용:
- 브로커 배포를 위해 프로젝트에 CR을 배포할 권한이 있는 사용자로 콘솔에 로그인합니다.
- 왼쪽 창에서 → 를 클릭합니다.
- Red Hat Integration - AMQ Broker for RHEL 8 (Multiarch) Operator를 클릭합니다.
- AMQ Broker 탭을 클릭합니다.
- ActiveMQArtemis 인스턴스 이름을 클릭합니다.
YAML 탭을 클릭합니다.
콘솔에서 YAML 편집기가 열리고 CR 인스턴스를 구성할 수 있습니다.
CR의
spec
섹션에서 사용자 및 역할을 정의하는 행을 추가합니다. 예를 들면 다음과 같습니다.apiVersion: broker.amq.io/v1beta1 kind: ActiveMQArtemisSecurity metadata: name: ex-prop spec: loginModules: propertiesLoginModules: - name: "prop-module" users: - name: "sam" password: "samspassword" roles: - "sender" - name: "rob" password: "robspassword" roles: - "receiver" securityDomains: brokerDomain: name: "activemq" loginModules: - name: "prop-module" flag: "sufficient" securitySettings: broker: - match: "#" permissions: - operationType: "send" roles: - "sender" - operationType: "createAddress" roles: - "sender" - operationType: "createDurableQueue" roles: - "sender" - operationType: "consume" roles: - "receiver" ...
참고이전 예제의 요소에 값을 항상 지정합니다. 예를 들어
securityDomains.brokerDomain
또는 역할의 값에 대한 값을 지정하지 않으면 결과 구성에 예기치 않은 결과가 발생할 수 있습니다.이전 구성은 다음 두 사용자를 정의합니다.
-
sender
라는 역할이 있는sam
사용자를 정의하는prop-module
이라는propertiesLoginModule
입니다. -
receiver
라는 역할이 있는 사용자를 정의하는prop-module
이라는
propertiesLoginModule
입니다.
이러한 역할의 속성은
securityDomains
섹션의brokerDomain
및broker
섹션에 정의되어 있습니다. 예를 들어,send
역할은 해당 역할의 사용자가 모든 주소에 대해 Cryostat 큐를 만들 수 있도록 정의되었습니다. 기본적으로 구성은 현재 네임스페이스에 CR에서 정의한 배포된 모든 브로커에 적용됩니다. 구성을 특정 브로커 배포로 제한하려면 8.1.3절. “보안 사용자 정의 리소스 구성 참조” 에 설명된applyToCrNames
옵션을 사용합니다.참고metadata
섹션에는namespace
속성을 포함하고 OpenShift Container Platform 웹 콘솔을 사용하여 CR 인스턴스를 생성하는 경우에만 값을 지정해야 합니다. 지정해야 하는 값은 브로커 배포를 위한 OpenShift 프로젝트의 이름입니다.-
CR 인스턴스를 배포합니다.
OpenShift 명령줄 인터페이스 사용:
- CR 파일을 저장합니다.
브로커 배포를 위해 프로젝트로 전환합니다.
$ oc project <project_name>
CR 인스턴스를 생성합니다.
$ oc create -f <path/to/security_custom_resource_instance>.yaml
OpenShift 웹 콘솔 사용:
- CR 구성을 완료하면 생성 을 클릭합니다.
4.3.2.2. 시크릿에 사용자 암호 저장
4.3.2.1절. “보안 사용자 정의 리소스(CR)를 사용하여 기본 JAAS 로그인 모듈 구성” 절차에서 사용자 암호는 ActiveMQArtemisSecurity
CR의 일반 텍스트로 저장됩니다. CR에서 암호를 일반 텍스트에 저장하지 않으려면 CR에서 암호를 제외하고 시크릿에 저장할 수 있습니다. CR을 적용하면 Operator는 시크릿에서 각 사용자의 암호를 검색하고 브로커 Pod의 artemis-users.properties
파일에 삽입합니다.
프로세스
oc create secret
명령을 사용하여 시크릿을 생성하고 각 사용자의 이름과 암호를 추가합니다. 시크릿 이름은security-properties- module name
의 이름 지정 규칙을 따라야 합니다. 여기서 모듈 이름은 CR에 구성된 로그인 모듈의 이름입니다. 예를 들면 다음과 같습니다.oc create secret generic security-properties-prop-module \ --from-literal=sam=samspassword \ --from-literal=rob=robspassword
CR의
spec
섹션에서 역할 정보와 함께 시크릿에 지정한 사용자 이름을 추가하지만 각 사용자의 암호를 포함하지 마십시오. 예를 들면 다음과 같습니다.apiVersion: broker.amq.io/v1beta1 kind: ActiveMQArtemisSecurity metadata: name: ex-prop spec: loginModules: propertiesLoginModules: - name: "prop-module" users: - name: "sam" roles: - "sender" - name: "rob" roles: - "receiver" securityDomains: brokerDomain: name: "activemq" loginModules: - name: "prop-module" flag: "sufficient" securitySettings: broker: - match: "#" permissions: - operationType: "send" roles: - "sender" - operationType: "createAddress" roles: - "sender" - operationType: "createDurableQueue" roles: - "sender" - operationType: "consume" roles: - "receiver" ...
CR 인스턴스를 배포합니다.
OpenShift 명령줄 인터페이스 사용:
- CR 파일을 저장합니다.
브로커 배포를 위해 프로젝트로 전환합니다.
$ oc project <project_name>
CR 인스턴스를 생성합니다.
$ oc create -f <path/to/address_custom_resource_instance>.yaml
OpenShift 웹 콘솔 사용:
- CR 구성을 완료하면 생성 을 클릭합니다.
추가 리소스
OpenShift Container Platform의 보안에 대한 자세한 내용은 OpenShift Container Platform 설명서의 Pod에 중요한 데이터 제공을 참조하십시오.
4.4. 타사 JAR 파일 추가
런타임 시 AMQ Broker에서 타사 JAR 파일을 사용할 수 있습니다. 예를 들어 브로커가 JDBC 데이터베이스에 메시지를 저장하도록 하려면 데이터베이스에 필요한 타사 JAR 파일을 로드하도록 브로커를 구성할 수 있습니다.
각 브로커 Pod의 마운트된 볼륨에서 타사 JAR 파일을 사용할 수 있도록 Operator를 구성하고 JAR 파일의 볼륨 경로를 브로커의 Java classpath에 추가해야 합니다.
JAR 파일이 크기가 1MB 미만인 경우 JAR 파일을 시크릿 또는 configmap에 추가하고 각 브로커 Pod에 JAR 파일을 마운트하도록 Operator를 구성할 수 있습니다. JAR 파일이 보안 및 configmaps에 대한 1MB 제한보다 크면 각 브로커 Pod에 공유 볼륨을 마운트하고 JAR 파일을 해당 볼륨에 다운로드하도록 Operator를 구성할 수 있습니다.
4.4.1. 시크릿 또는 구성 맵을 사용하여 브로커 Pod에 JAR 파일 마운트
JAR 파일이 1MB 미만이면 시크릿 또는 구성 맵을 사용하여 각 브로커 Pod에 타사 JAR 파일을 마운트할 수 있습니다. 또한 런타임 시 마운트된 위치에서 JAR 파일을 로드하도록 브로커의 Java classpath도 수정해야 합니다.
다음 절차에서는 시크릿을 사용하여 JAR 파일을 마운트한다고 가정합니다.
프로세스
oc create secret
명령을 사용하여 추가하려는 타사 JAR 파일이 포함된 시크릿을 생성합니다. 예를 들면 다음과 같습니다.oc create secret generic log4j-template --from-file=log4j-layout-template-json-2.22.1.jar
시크릿 생성 방법에 대한 자세한 내용은 Kubernetes 문서의 시크릿을 참조하십시오. https://kubernetes.io/docs/concepts/configuration/secret/
브로커 배포에 대한 CR을 편집하고 각 브로커 Pod에 타사 JAR 파일이 포함된 시크릿을 마운트하도록 Operator를 구성합니다. 예를 들어 다음 구성은
log4j-template
이라는 시크릿을 마운트합니다.deploymentPlan: ... extraMounts: secrets: - "log4j-template" ...
JAR 파일은 각 브로커 Pod의
/amq/extra/secrets/시크릿 이름
디렉터리에 마운트됩니다. 예를 들어/amq/extra/secrets/postgresql-driver/log4j-template.jar
.ARTEMIS_EXTRA_LIBS
환경 변수를 생성하여 브로커의 Java 클래스 경로를 확장하여 브로커가 각 Pod의 마운트된 디렉터리에서 JAR 파일을 로드합니다. 예를 들면 다음과 같습니다.spec: ... env: - name: ARTEMIS_EXTRA_LIBS value: /amq/extra/secrets/log4j-template
- CR을 저장합니다.
4.4.2. 각 브로커 Pod의 볼륨에 JAR 파일 다운로드
JAR 파일이 1MB보다 크면 시크릿 또는 구성 맵을 사용하여 각 브로커 Pod에 JAR 파일을 마운트할 수 없습니다. 대신 JAR 파일을 각 브로커 Pod에 Operator가 마운트하는 영구 공유 볼륨으로 다운로드하도록 Operator를 구성할 수 있습니다.
사전 요구 사항
각 브로커 Pod에 마운트할 수 있는 영구 공유 볼륨을 사용할 수 있습니다.
프로세스
-
브로커 배포에 사용할
ActiveMQArtemis
CR을 편집합니다. 브로커 CR에서
extraVolumes
및extraVolumeMounts
속성을 사용하여 영구 볼륨을 추가하고 각 브로커 Pod에 볼륨을 마운트합니다. 예를 들면 다음과 같습니다.deploymentPlan: ... extraVolumes: - name: extra-volume persistentVolumeClaim: claimName: extra-jars extraVolumeMounts: - name: extra-volume mountPath: /opt/extra-lib ...
resourceTemplates
특성을 사용하여 배포에 대한 StatefulSet 리소스를 사용자 지정합니다. 사용자 지정에서 init 컨테이너를 사용하여 각 Pod에서 생성한추가 볼륨
볼륨을 마운트하고 JAR 파일을 볼륨으로 다운로드합니다. 예를 들면 다음과 같습니다.spec: ... resourceTemplates: - selector: kind: StatefulSet patch: kind: StatefulSet spec: template: spec: initContainers: - name: mysql-jdbc-driver-init volumeMounts: - mountPath: /opt/extra-lib name: extra-volume image: curlimages/curl:8.6.0 command: - /bin/sh args: - -c - "if ! [ -f /opt/extra-lib/mysql-connector.jar ]; then curl https://repo1.maven.org/maven2/mysql/mysql-connector-java/8.0.23/mysql-connector-java-8.0.23.jar --output /opt/extra-lib/mysql-connector.jar ; fi"
이 예제에서 curl 이미지는 파일이 볼륨에 없는 경우
mysql-connector.jar
파일을 볼륨의 마운트된 경로인/opt/extra-lib
에 다운로드하는 데 사용됩니다.ARTEMIS_EXTRA_LIBS
환경 변수를 생성하여 브로커가 공유 볼륨에서 JAR 파일을 로드하도록 브로커의 Java 클래스 경로를 확장합니다. 예를 들면 다음과 같습니다.spec: ... env: - name: ARTEMIS_EXTRA_LIBS value: /opt/extra-lib
- CR을 저장합니다.
4.5. 메시지 지속성 구성
기본적으로 AMQ Broker는 메시지 데이터를 유지(즉, 저장)하지 않습니다. AMQ Broker에는 메시지 데이터를 유지하기 위한 두 가지 옵션이 있습니다.
- 저널에 메시지 저장. 지속성을 활성화하는 경우 메시지를 유지하는 기본 방법입니다. 저널 기반 지속성은 파일 시스템의 저널에 메시지를 쓰는 고성능 옵션입니다.
- 데이터베이스에 메시지 저장. 이 옵션은 JDBC(Java Database Connectivity) 연결을 사용하여 선택한 데이터베이스에 메시지를 저장합니다.
AMQ Broker에서 지원하는 데이터베이스 및 네트워크 파일 시스템에 대한 최신 정보는 Red Hat 고객 포털에서 Red Hat AMQ 7 지원 구성 을 참조하십시오.
4.5.1. 저널 기반 지속성 구성
지속성을 활성화하면 기본적으로 저널 파일에 메시지가 유지됩니다.
프로세스
-
브로커 배포에 대한
ActiveMQArtemis
CR(사용자 정의 리소스)을 편집합니다. persistenceEnabled
특성을true
로 설정합니다. 예를 들면 다음과 같습니다.spec: ... deploymentPlan: persistenceEnabled: true ...
- CR을 저장합니다.
4.5.2. 데이터베이스 지속성 구성
JDBC(Java Database Connectivity) 연결을 사용하여 데이터베이스에서 메시지를 유지하도록 AMQ Broker를 구성할 수 있습니다.
데이터베이스에서 메시지 데이터를 저장하면 브로커는 JDBC(Java Database Connectivity) 연결을 사용하여 메시지 및 바인딩 데이터를 데이터베이스 테이블에 저장합니다. 테이블의 데이터는 AMQ Broker 저널 인코딩을 사용하여 인코딩됩니다. 지원되는 데이터베이스에 대한 자세한 내용은 Red Hat Customer Portal의 Red Hat AMQ 7 지원 구성 을 참조하십시오.
관리자는 조직의 광범위한 IT 인프라의 요구 사항에 따라 메시지 데이터를 데이터베이스에 저장하도록 선택할 수 있습니다. 그러나 데이터베이스를 사용하면 메시징 시스템의 성능에 부정적인 영향을 미칠 수 있습니다. 특히 JDBC를 통해 데이터베이스 테이블에 메시징 데이터를 작성하면 브로커에 상당한 성능 오버헤드가 발생합니다.
사전 요구 사항
- AMQ Broker와 함께 사용할 전용 데이터베이스입니다.
- 필요한 JDBC 드라이버 JAR 파일은 런타임 시 브로커에서 사용할 수 있습니다. 런타임 시 브로커에서 JAR 파일을 사용할 수 있도록 하는 방법에 대한 자세한 내용은 4.4절. “타사 JAR 파일 추가” 을 참조하십시오.
-
배포에는 단일 브로커 인스턴스가 있습니다. 배포에 단일 브로커 인스턴스가 있는지 확인하려면
deployment.size
속성이ActiveMQArtemis
CR(사용자 정의 리소스)에 없는지 확인합니다. CR에서deployment.size
속성이 생략되면 단일 브로커 인스턴스가 배포됩니다.
프로세스
-
브로커 배포에 대한
ActiveMQArtemis
CR(사용자 정의 리소스)을 편집합니다. brokerProperties
속성을 사용하여 JDBC 데이터베이스 지속성을 활성화합니다. 예를 들면 다음과 같습니다.spec: ... brokerProperties: - storeConfiguration=DATABASE - storeConfiguration.jdbcDriverClassName=<class name> - storeConfiguration.jdbcConnectionUrl=jdbc:<URL> - HAPolicyConfiguration=SHARED_STORE_PRIMARY ...
- storeConfiguration
-
JDBC 데이터베이스에 메시지를 유지하려면
DATABASE
값을 지정합니다. - storeConfiguration.jdbcDriverClassName
JDBC 데이터베이스 드라이버의 정규화된 클래스 이름입니다. 예를 들면
org.postgresql.Driver
입니다.지원되는 데이터베이스에 대한 자세한 내용은 Red Hat Customer Portal의 Red Hat AMQ 7 지원 구성 을 참조하십시오.
- storeConfiguration.jdbcConnectionUrl
데이터베이스 이름 및 모든 구성 매개변수를 포함하여 데이터베이스 서버의 전체 JDBC 연결 URL입니다. 예를 들면 다음과 같습니다.
JDBC:postgresql://postgresql-service.default.svc.cluster.local:5432/postgres?user=postgres&password=postgres
이 예에서 데이터베이스 이름은
postgres
입니다.- HAPolicyConfiguration
-
SHARED_STORE_
PRI Cryostat로 설정하여 브로커가 JDBC 리스 잠금을 사용하여 데이터베이스 테이블을 여러 브로커의 동시 액세스로부터 보호합니다. 두 번째 브로커 인스턴스가 의도치 않게 배포되는 경우 리스 잠금을 통해 두 번째 브로커가 데이터베이스에 기록되지 않습니다.
(선택 사항) 필요한 경우 다음 속성의 기본값을 변경합니다.
- storeConfiguration.jdbcNetworkTimeout
- JDBC 네트워크 연결 제한 시간(밀리초)입니다. 기본값은 20000밀리초입니다.
- storeConfiguration.jdbcLockRenewPeriod
-
현재 JDBC 잠금에 대한 갱신 기간의 길이(밀리초)입니다. 이 시간이 지나면 브로커는 잠금을 갱신할 수 있습니다.
storeConfiguration.jdbcLockExpiration
값보다 여러 번 작은 값을 설정하여 브로커에게 리스를 연장할 수 있는 충분한 시간을 제공하고 브로커에게 연결 문제 발생 시 잠금을 갱신할 수 있는 시간을 제공합니다. 기본값은 2000밀리초입니다. - storeConfiguration.jdbcLockExpiration
-
storeConfiguration.jdbcLockRenewPeriod
의 값이 경과한 경우에도 현재 JDBC 잠금이 보유(즉, 획득 또는 갱신됨)로 간주되는 시간(밀리초)입니다. 브로커는storeConfiguration.jdbcLockRenewPeriod
의 값에 따라 소유한 잠금을 주기적으로 갱신하려고 합니다. 예를 들어 연결 문제로 인해 브로커가 잠금을 갱신하지 못하면 브로커는 잠금을 성공적으로 획득하거나 갱신한 후storeConfiguration.jdbcLockExpiration
의 값이 전달될 때까지 잠금을 갱신하려고 합니다. 위에서 설명한 갱신 동작의 예외는 다른 브로커가 잠금을 취득하는 경우입니다. 이는 DBMS(데이터베이스 관리 시스템)와 브로커 간에 시간 불일치가 있거나 가비지 수집에 대한 일시 중지가 긴 경우 발생할 수 있습니다. 이 경우 원래 잠금을 보유한 브로커는 잠금을 손실하고 갱신하려고 시도하지 않습니다. 만료 후 현재 소유하고 있는 브로커에 의해 JDBC 잠금이 갱신되지 않은 경우 다른 브로커는 JDBC 잠금을 설정할 수 있습니다. 기본값은 20000밀리초입니다. - storeConfiguration.jdbcJournalSyncPeriod
- 브로커 저널이 JDBC와 동기화되는 기간(밀리초)입니다. 기본값은 5밀리초입니다.
- storeConfiguration.jdbcMaxPageSizeBytes
- AMQ Broker가 JDBC 데이터베이스에 메시지를 저장할 때 각 페이지 파일의 최대 크기(바이트)입니다. 기본값은 102400이며, 이는 100KB입니다. 지정한 값은 "K" "MB" 및 "GB"와 같은 바이트 표기법도 지원합니다.
- CR을 저장합니다.
4.6. 브로커 스토리지 요구 사항 구성
Operator 기반 브로커 배포에서 영구 스토리지를 사용하려면 배포를 생성하는 데 사용되는 CR(사용자 정의 리소스) 인스턴스에서 persistenceEnabled
를 true
로 설정합니다. OpenShift 클러스터에 컨테이너 네이티브 스토리지가 없는 경우 PV(영구 볼륨)를 수동으로 프로비저닝하고 PVC(영구 볼륨 클레임)를 사용하여 Operator에서 요청할 수 있는지 확인해야 합니다. 예를 들어 영구 스토리지가 있는 두 브로커의 클러스터를 생성하려면 두 개의 PV를 사용할 수 있어야 합니다.
OpenShift Container Platform에서 PV를 수동으로 프로비저닝하는 경우 각 PV의 회수 정책을 Retain
으로 설정해야 합니다. PV의 회수 정책이 Retain
으로 설정되지 않고 Operator가 PV를 클레임하는 데 사용된 PVC가 삭제되면 PV도 삭제됩니다. PV를 삭제하면 볼륨에서 데이터가 손실됩니다. 자세한 내용은 회수 정책 설정에 대한 자세한 내용은 OpenShift Container Platform 설명서의 영구 스토리지 이해 를 참조하십시오.
기본적으로 PVC는 클러스터에 구성된 기본 스토리지 클래스에서 각 브로커의 2GiB 스토리지를 가져옵니다. PVC에서 요청된 기본 크기 및 스토리지 클래스를 재정의할 수 있지만 CR을 처음 배포하기 전에 CR에 새 값을 구성하면 됩니다.
4.6.1. 브로커 스토리지 크기 및 스토리지 클래스 구성
다음 절차에서는 브로커 배포에 대해 각 브로커에 필요한 영구 볼륨 클레임(PVC)의 크기 및 스토리지 클래스를 지정하도록 브로커 배포에 대한 CR(사용자 정의 리소스) 인스턴스를 구성하는 방법을 보여줍니다.
AMQ Broker를 배포한 후 CR의 스토리지 구성을 변경하면 업데이트된 구성이 기존 Pod에 다시 적용되지 않습니다. 그러나 업데이트된 구성은 배포를 확장하는 경우 생성된 새 Pod에 적용됩니다.
사전 요구 사항
- CR 인스턴스를 사용하여 기본 브로커 배포를 생성하는 방법을 숙지해야 합니다. 3.4.1절. “기본 브로커 인스턴스 배포”을 참조하십시오.
PV(영구 볼륨)가 이미 프로비저닝되어 있고 Operator에서 요청할 수 있도록 설정해야 합니다. 예를 들어 영구 스토리지가 있는 두 브로커의 클러스터를 생성하려면 두 개의 PV를 사용할 수 있어야 합니다.
영구 스토리지 프로비저닝에 대한 자세한 내용은 OpenShift Container Platform 설명서의 영구 스토리지 이해 를 참조하십시오.
프로세스
브로커 배포에 대한 CR(사용자 정의 리소스) 인스턴스 구성을 시작합니다.
OpenShift 명령줄 인터페이스 사용:
배포를 생성하는 프로젝트에 CR을 배포할 수 있는 권한이 있는 사용자로 OpenShift에 로그인합니다.
oc login -u <user> -p <password> --server=<host:port>
-
다운로드 및 추출한 Operator 설치 아카이브의
deploy/crs
디렉터리에 포함된broker_activemqartemis_cr.yaml
이라는 샘플 CR 파일을 엽니다.
OpenShift Container Platform 웹 콘솔 사용:
- 배포를 생성하는 프로젝트에 CR을 배포할 권한이 있는 사용자로 콘솔에 로그인합니다.
- 기본 브로커 CRD를 기반으로 새 CR 인스턴스를 시작합니다. 왼쪽 창에서 → 를 클릭합니다.
- ActiveMQArtemis CRD를 클릭합니다.
- Instances 탭을 클릭합니다.
Create ActiveMQArtemis 를 클릭합니다.
콘솔에서 YAML 편집기가 열리고 CR 인스턴스를 구성할 수 있습니다.
기본 브로커 배포의 경우 아래 표시된 구성과 유사할 수 있습니다.
apiVersion: broker.amq.io/v1beta1 kind: ActiveMQArtemis metadata: name: ex-aao spec: deploymentPlan: size: 1 image: placeholder requireLogin: false persistenceEnabled: true journalType: nio messageMigration: true
broker_activemqartemis_cr.yaml
샘플 CR 파일에서image
속성이자리 표시자
의 기본값으로 설정되어 있는지 확인합니다. 이 값은 기본적으로image
속성이 배포에 사용할 브로커 컨테이너 이미지를 지정하지 않음을 나타냅니다. Operator에서 사용할 적절한 브로커 컨테이너 이미지를 결정하는 방법을 알아보려면 2.7절. “Operator에서 컨테이너 이미지를 선택하는 방법” 를 참조하십시오.브로커 스토리지 크기를 지정하려면 CR의
deploymentPlan
섹션에서storage
섹션을 추가합니다.size
속성을 추가하고 값을 지정합니다. 예를 들면 다음과 같습니다.spec: deploymentPlan: size: 1 image: placeholder requireLogin: false persistenceEnabled: true journalType: nio messageMigration: true storage: size: 4Gi
storage.size
-
각 브로커 Pod에 영구 스토리지에 필요한 PVC(영구 볼륨 클레임)의 크기(바이트)입니다. 이 속성은
persistenceEnabled
가true
로 설정된 경우에만 적용됩니다. 지정한 값에 바이트 표기법(예: K, M, G) 또는 바이너리 동등한 바이너리(Ki, Mi, Gi)를 사용하는 단위가 포함되어야 합니다.
각 브로커 Pod에 영구 스토리지에 필요한 스토리지 클래스를 지정하려면
스토리지
섹션에storageClassName
속성을 추가하고 값을 지정합니다. 예를 들면 다음과 같습니다.spec: deploymentPlan: size: 1 image: placeholder requireLogin: false persistenceEnabled: true journalType: nio messageMigration: true storage: size: 4Gi storageClassName: gp3
storage.storageClassName
PVC(영구 볼륨 클레임)에서 요청할 스토리지 클래스의 이름입니다. 스토리지 클래스는 관리자가 사용 가능한 스토리지를 설명하고 분류할 수 있는 방법을 제공합니다. 예를 들어 다른 스토리지 클래스는 특정 서비스 수준, 백업 정책 등에 매핑될 수 있습니다.
스토리지 클래스를 지정하지 않으면 PVC에 의해 클러스터에 구성된 기본 스토리지 클래스가 있는 영구 볼륨이 클레임됩니다.
참고스토리지 클래스를 지정하면 볼륨의 스토리지 클래스가 지정된 스토리지 클래스와 일치하는 경우에만 PVC에서 영구 볼륨을 클레임합니다.
CR 인스턴스를 배포합니다.
OpenShift 명령줄 인터페이스 사용:
- CR 파일을 저장합니다.
브로커 배포를 생성하는 프로젝트로 전환합니다.
$ oc project <project_name>
CR 인스턴스를 생성합니다.
$ oc create -f <path/to/custom_resource_instance>.yaml
OpenShift 웹 콘솔 사용:
- CR 구성을 완료하면 생성 을 클릭합니다.
4.7. Operator 기반 브로커 배포에 대한 리소스 제한 및 요청 구성
Operator 기반 브로커 배포를 생성할 때 배포의 브로커 Pod는 OpenShift 클러스터의 노드의 StatefulSet에서 실행됩니다. 배포에 대해 사용자 정의 리소스(CR) 인스턴스를 구성하여 각 Pod에서 실행되는 브로커 컨테이너에서 사용하는 host-node 컴퓨팅 리소스를 지정할 수 있습니다. CPU 및 메모리(RAM)에 대한 제한 및 요청 값을 지정하면 브로커 Pod의 안정성을 보장할 수 있습니다.
- CR을 처음 배포하기 전에 브로커 배포의 CR 인스턴스에 제한 및 요청에 대한 구성을 추가해야 합니다. 이미 실행 중인 브로커 배포에 구성을 추가할 수 없습니다.
- Red Hat은 특정 메시징 시스템 사용 사례와 구현한 결과 아키텍처를 기반으로 하므로 제한 및 요청에 대한 값을 권장할 수 없습니다. 그러나 프로덕션 환경에 맞게 구성하기 전에 개발 환경에서 이러한 값을 테스트하고 조정하는 것이 좋습니다.
- Operator는 각 브로커 Pod를 시작할 때 Init Container 라는 컨테이너 유형을 실행합니다. 각 브로커 컨테이너에 대해 구성하는 모든 리소스 제한 및 요청은 각 Init Container에도 적용됩니다. 브로커 배포에서 Init Container 사용에 대한 자세한 내용은 4.1절. “Operator에서 브로커 구성을 생성하는 방법” 을 참조하십시오.
다음 제한 및 요청 값을 지정할 수 있습니다.
CPU 제한
- Pod에서 실행되는 각 브로커 컨테이너의 경우 이 값은 컨테이너에서 사용할 수 있는 최대 호스트 노드 CPU 양입니다. 브로커 컨테이너가 지정된 CPU 제한을 초과하려고 하면 OpenShift에서 컨테이너를 제한합니다. 이렇게 하면 노드에서 실행되는 Pod 수에 관계없이 컨테이너의 성능이 일관되게 유지됩니다.
메모리 제한
- Pod에서 실행되는 각 브로커 컨테이너의 경우 이 값은 컨테이너에서 사용할 수 있는 최대 호스트 노드 메모리 양입니다. 브로커 컨테이너가 지정된 메모리 제한을 초과하려고 하면 OpenShift에서 컨테이너를 종료합니다. 브로커 Pod가 다시 시작됩니다.
CPU 요청
Pod에서 실행되는 각 브로커 컨테이너의 경우 이 값은 컨테이너가 요청하는 호스트 노드 CPU의 양입니다. OpenShift 스케줄러는 포드 배치 중에 CPU 요청 값을 고려하여 충분한 컴퓨팅 리소스가 있는 노드에 브로커 Pod를 바인딩합니다.
CPU 요청 값은 브로커 컨테이너를 실행하는 데 필요한 최소 CPU 양입니다. 그러나 노드에 CPU에 대한 경합이 없는 경우 컨테이너에서 사용 가능한 모든 CPU를 사용할 수 있습니다. CPU 제한을 지정한 경우 컨테이너가 해당 CPU 사용량을 초과할 수 없습니다. 노드에 CPU 경합이 있는 경우 CPU 요청 값은 OpenShift가 모든 컨테이너의 CPU 사용량을 평가할 수 있는 방법을 제공합니다.
메모리 요청
Pod에서 실행되는 각 브로커 컨테이너의 경우 이 값은 컨테이너에서 요청하는 호스트 노드 메모리 양입니다. OpenShift 스케줄러는 포드 배치 중에 메모리 요청 값을 고려하여 충분한 컴퓨팅 리소스가 있는 노드에 브로커 Pod를 바인딩합니다.
메모리 요청 값은 브로커 컨테이너를 실행하는 데 필요한 최소 메모리 양입니다. 그러나 컨테이너는 가능한 한 많은 사용 가능한 메모리를 사용할 수 있습니다. 메모리 제한을 지정한 경우 브로커 컨테이너는 해당 메모리 사용량을 초과할 수 없습니다.
CPU는 밀리코어라는 단위로 측정됩니다. OpenShift 클러스터의 각 노드는 운영 체제를 검사하여 노드의 CPU 코어 수를 확인합니다. 그런 다음 노드는 해당 값을 1000으로 곱하여 총 용량을 표현합니다. 예를 들어 노드에 두 개의 코어가 있는 경우 노드의 CPU 용량은 2000m
로 표시됩니다. 따라서 단일 코어의 1/10을 사용하려면 100m
값을 지정합니다.
메모리는 바이트 단위로 측정됩니다. 바이트 표기법 (E, P, T, G, M, K) 또는 바이너리 동등한 값 (Ei, Pi, Ti, Gi, Mi, Ki)을 사용하여 값을 지정할 수 있습니다. 지정한 값에 단위가 포함되어야 합니다.
4.7.1. 브로커 리소스 제한 및 요청 구성
다음 예는 배포의 Pod에서 실행되는 각 브로커 컨테이너의 CPU 및 메모리에 대한 제한 및 요청을 설정하기 위해 브로커 배포에 대한 기본 CR(사용자 정의 리소스) 인스턴스를 구성하는 방법을 보여줍니다.
- CR을 처음 배포하기 전에 브로커 배포의 CR 인스턴스에 제한 및 요청에 대한 구성을 추가해야 합니다. 이미 실행 중인 브로커 배포에 구성을 추가할 수 없습니다.
- Red Hat은 특정 메시징 시스템 사용 사례와 구현한 결과 아키텍처를 기반으로 하므로 제한 및 요청에 대한 값을 권장할 수 없습니다. 그러나 프로덕션 환경에 맞게 구성하기 전에 개발 환경에서 이러한 값을 테스트하고 조정하는 것이 좋습니다.
사전 요구 사항
- CR 인스턴스를 사용하여 기본 브로커 배포를 생성하는 방법을 숙지해야 합니다. 3.4.1절. “기본 브로커 인스턴스 배포”을 참조하십시오.
프로세스
브로커 배포에 대한 CR(사용자 정의 리소스) 인스턴스 구성을 시작합니다.
OpenShift 명령줄 인터페이스 사용:
배포를 생성하는 프로젝트에 CR을 배포할 수 있는 권한이 있는 사용자로 OpenShift에 로그인합니다.
oc login -u <user> -p <password> --server=<host:port>
-
다운로드 및 추출한 Operator 설치 아카이브의
deploy/crs
디렉터리에 포함된broker_activemqartemis_cr.yaml
이라는 샘플 CR 파일을 엽니다.
OpenShift Container Platform 웹 콘솔 사용:
- 배포를 생성하는 프로젝트에 CR을 배포할 권한이 있는 사용자로 콘솔에 로그인합니다.
- 기본 브로커 CRD를 기반으로 새 CR 인스턴스를 시작합니다. 왼쪽 창에서 → 를 클릭합니다.
- ActiveMQArtemis CRD를 클릭합니다.
- Instances 탭을 클릭합니다.
Create ActiveMQArtemis 를 클릭합니다.
콘솔에서 YAML 편집기가 열리고 CR 인스턴스를 구성할 수 있습니다.
기본 브로커 배포의 경우 아래 표시된 구성과 유사할 수 있습니다.
apiVersion: broker.amq.io/v1beta1 kind: ActiveMQArtemis metadata: name: ex-aao spec: deploymentPlan: size: 1 image: placeholder requireLogin: false persistenceEnabled: true journalType: nio messageMigration: true
broker_activemqartemis_cr.yaml
샘플 CR 파일에서image
속성이자리 표시자
의 기본값으로 설정되어 있는지 확인합니다. 이 값은 기본적으로image
속성이 배포에 사용할 브로커 컨테이너 이미지를 지정하지 않음을 나타냅니다. Operator에서 사용할 적절한 브로커 컨테이너 이미지를 결정하는 방법을 알아보려면 2.7절. “Operator에서 컨테이너 이미지를 선택하는 방법” 를 참조하십시오.CR의
deploymentPlan
섹션에서resources
섹션을 추가합니다.제한
및요청
하위 섹션을 추가합니다. 각 하위 섹션에cpu
및memory
속성을 추가하고 값을 지정합니다. 예를 들면 다음과 같습니다.spec: deploymentPlan: size: 1 image: placeholder requireLogin: false persistenceEnabled: true journalType: nio messageMigration: true resources: limits: cpu: "500m" memory: "1024M" requests: cpu: "250m" memory: "512M"
limits.cpu
- 배포에서 Pod에서 실행되는 각 브로커 컨테이너는 이 양의 호스트 노드 CPU 사용량을 초과할 수 없습니다.
limits.memory
- 배포에서 Pod에서 실행되는 각 브로커 컨테이너는 이 양의 호스트 노드 메모리 사용량을 초과할 수 없습니다.
requests.cpu
- 배포의 Pod에서 실행되는 각 브로커 컨테이너는 이 양의 host-node CPU를 요청합니다. 이 값은 브로커 컨테이너를 실행하는 데 필요한 최소 CPU 양입니다.
requests.memory
배포의 Pod에서 실행되는 각 브로커 컨테이너는 이 양의 호스트 노드 메모리를 요청합니다. 이 값은 브로커 컨테이너를 실행하는 데 필요한 최소 메모리 양입니다.
참고리소스에 대한
제한을
지정하고요청을
지정하지 않으면 브로커 컨테이너에서 해당 리소스에 대해 구성된제한
값을 요청합니다. 예를 들어 다음 구성에서 브로커 컨테이너는500m
cpu 및1024M
메모리의 구성된제한
값을 요청합니다.spec: deploymentPlan: size: 3 ... resources: limits: cpu: "500m" memory: "1024M"
중요요청된 메모리 및 CPU의 정확한 양을 제어하고 배포에 여러 브로커가 있는 경우 각 브로커 컨테이너에 동일한 값이 요청되도록
요청을
설정하지 않고제한을
설정합니다.
CR 인스턴스를 배포합니다.
OpenShift 명령줄 인터페이스 사용:
- CR 파일을 저장합니다.
브로커 배포를 생성하는 프로젝트로 전환합니다.
$ oc project <project_name>
CR 인스턴스를 생성합니다.
$ oc create -f <path/to/custom_resource_instance>.yaml
OpenShift 웹 콘솔 사용:
- CR 구성을 완료하면 생성 을 클릭합니다.
4.8. AMQ 관리 콘솔에 대한 액세스 활성화
Operator 기반 배포의 각 브로커 Pod는 포트 8161에서 AMQ 관리 콘솔의 자체 인스턴스를 호스팅합니다. 브로커 배포를 위해 CR(사용자 정의 리소스) 인스턴스에서 콘솔에 대한 액세스를 활성화할 수 있습니다. 콘솔에 대한 액세스를 활성화한 후 콘솔을 사용하여 웹 브라우저에서 브로커를 보고 관리할 수 있습니다.
프로세스
-
브로커 배포에 사용할
ActiveMQArtemis
(CR) 인스턴스를 편집합니다. CR의
spec
섹션에서console
속성을 추가합니다.console
섹션에서expose
속성을 추가하고 값을true
로 설정합니다.spec: .. console: expose: true
콘솔을 노출하면 Operator가 배포의 각 브로커 Pod에 콘솔에 대한 전용 서비스와 Openshift 경로를 자동으로 생성합니다.
Openshift 클러스터의 내부 라우팅 구성과 일치하도록 콘솔에 노출된 경로의 호스트 이름을 사용자 지정하려면 다음 중 하나 또는 둘 다를 수행할 수 있습니다.
-
ingressHost
특성을 사용하여 기본 호스트 이름을 콘솔 경로의 사용자 지정 호스트 이름으로 바꿉니다. -
ingressDomain
특성을 사용하여 호스트 이름에 사용자 지정 도메인을 추가합니다. 사용자 정의 도메인은 CR 구성에 의해 노출되는 허용 경로와 같은 기타 모든 경로에도 적용됩니다.
콘솔 경로에 대해 특별히 사용자 정의 호스트 이름을 설정하려면
ingressHost
속성을 추가하고 호스트 문자열을 지정합니다. 예를 들면 다음과 같습니다.spec: .. console: expose: true ingressHost: my-console-production.my-subdomain.com ..
참고ingressHost
값은 Openshift 클러스터에서 고유해야 합니다. 브로커 클러스터에 브로커 Pod가 여러 개 있는 경우 값에 $(BROKER_ORDINAL) 변수를 포함하여ingressHost
값을 고유하게 만들 수 있습니다. Operator는 각 브로커 Pod에 대해 생성하는 경로에서 이 변수를 Pod에 할당된 StatefulSet의 ordinal 수로 바꿉니다. 예를 들어my-console-$(BROKER_ORDINAL)-production.my-subdomain.com의
ingressHost
값은 두 번째 Pod의my-console-1-production.my-subdomain.com
에 경로의 호스트 이름을my-console-0-production.my-subdomain.com
으로 설정합니다.콘솔 경로에 대한 사용자 정의 호스트 이름 문자열에 다음 변수를 포함할 수 있습니다.
표 4.3. 콘솔 경로에 대한 사용자 정의 호스트 이름 문자열의 변수 이름 설명 $(CR_NAME)
CR의
metadata.name
속성 값입니다.$(CR_NAMESPACE)
사용자 정의 리소스의 네임스페이스입니다.
$(BROKER_ORDINAL)
StatefulSet에서 브로커 Pod에 할당한 서수입니다.
$(ITEM_NAME)
수락자의 이름입니다.
$(RES_TYPE)
리소스 유형입니다. 경로에는
rte
의 리소스 유형이 있습니다. 수신에는 리소스 유형의ing
이 있습니다.$(INGRESS_DOMAIN)
CR에 구성된 경우
spec.ingressDomain
속성의 값입니다.경로의 호스트 이름에 사용자 정의 도메인을 추가하려면
spec.ingressDomain
속성을 추가하고 사용자 정의 문자열을 지정합니다. 예를 들면 다음과 같습니다.spec: ... ingressDomain: my.domain.com
-
조직의 네트워크 정책에서 경로 대신 Ingress를 사용하여 콘솔을 노출해야 하는 경우 다음 단계를 완료합니다.
exposeMode
속성을 추가하고 값을ingress
로 설정합니다.spec: .. console: expose: true exposeMode: ingress ..
Openshift 클러스터의 내부 라우팅 구성과 일치하도록 콘솔에 노출된 인그레스의 호스트 이름을 사용자 지정하려면 다음 중 하나 또는 둘 다를 수행할 수 있습니다.
-
ingressHost
특성을 사용하여 기본 호스트 이름을 사용자 지정 호스트 이름으로 교체합니다. ingressDomain
특성을 사용하여 호스트 이름에 사용자 지정 도메인을 추가합니다. 사용자 정의 도메인은 CR 구성에 의해 노출되는 어셉터의 수신과 같은 기타 모든 수신에도 적용됩니다.콘솔용으로 생성된 Ingress에 대해 특별히 사용자 정의 호스트 이름을 설정하려면
ingressHost
속성을 추가하고 호스트 문자열을 지정합니다. 예를 들면 다음과 같습니다.spec: .. console: expose: true exposeMode: ingress expose: true exposeMode: ingress ingressHost: my-console-production.my-subdomain.com ...
동일한 변수를 포함하여 이 절차의 앞부분에서 설명하는 경로 호스트로 수신 호스트를 사용자 지정할 수 있습니다.
Ingress의 호스트 이름에 사용자 정의 도메인을 추가하려면
spec.ingressDomain
속성을 추가하고 사용자 지정 문자열을 지정합니다.spec: ... ingressDomain: my.domain.com
콘솔의 경우 수신의 기본 호스트 이름은 <
cr-name>-wconsj-<ordinal>-svc-ing-<namespace
> 형식으로 되어 있습니다. 예를 들어amqbroker
네임 스페이스에production
이라는 CR이 있는 경우mydomain.com
의ingressDomain
값은 Pod 0에서 생성된 수신에 대해production-wconsj-0-svc-svc-mynamespace.amqbroker.com
의 호스트 값을 제공합니다.spec.ingressDomain
속성에 대한 자세한 내용은 8.1절. “사용자 정의 리소스 구성 참조” 을 참조하십시오.
-
OpenShift 클러스터 외부의 클라이언트에서 콘솔에 대한 보안 연결을 활성화하려면 다음 단계를 완료하십시오.
sslEnabled
속성을 추가하고 값을true
로 설정합니다.spec: .. console: expose: true exposeMode: ingress sslEnabled: true ..
sslSecret
속성을 추가하고 콘솔을 보호할 인증서가 포함된 보안 이름을 지정합니다. 예를 들면 다음과 같습니다.spec: .. console: expose: true exposeMode: ingress sslEnabled: true sslSecret: console-tls-secret ..
spec.env
속성을 사용하여 인증서를 갱신할 때마다 새 인증서를 자동으로 로드하도록 콘솔을 구성하는 환경 변수를 추가합니다. 예를 들면 다음과 같습니다.spec: .. env: - name: JAVA_ARGS_APPEND value: -Dwebconfig.bindings.artemis.sslAutoReload=true ..
- CR을 저장합니다.
추가 리소스
AMQ Management Console에 연결하는 방법에 대한 자세한 내용은 다음을 참조하십시오. 5장. Operator 기반 브로커 배포를 위한 AMQ 관리 콘솔에 연결
4.9. 브로커 컨테이너의 환경 변수 설정
브로커 배포의 CR(사용자 정의 리소스) 인스턴스에서 AMQ Broker 컨테이너에 전달되는 환경 변수를 설정할 수 있습니다.
예를 들어 TZ
와 같은 표준 환경 변수를 사용하여 시간대 또는 JDK_JAVA_OPTIONS
를 설정하여 시작 시 Java 시작자가 사용하는 명령줄 인수에 인수를 미리 추가할 수 있습니다. 또는 AMQ Broker의 사용자 지정 변수 JAVA_ARGS_APPEND
를 사용하여 Java 시작자가 사용하는 명령줄 인수에 사용자 지정 인수를 추가할 수 있습니다.
프로세스
브로커 배포의 CR(사용자 정의 리소스) 인스턴스를 편집합니다.
OpenShift 명령줄 인터페이스 사용:
다음 명령을 실행합니다.
oc edit ActiveMQArtemis <CR instance name> -n <namespace>
OpenShift Container Platform 웹 콘솔 사용:
- 브로커 배포를 위해 프로젝트에 CR을 배포할 권한이 있는 사용자로 콘솔에 로그인합니다.
- 왼쪽 창에서 → 를 클릭합니다.
- Red Hat Integration - AMQ Broker for RHEL 8 (Multiarch) Operator를 클릭합니다.
- AMQ Broker 탭을 클릭합니다.
- ActiveMQArtemis 인스턴스 이름의 이름을 클릭합니다.
YAML 탭을 클릭합니다.
콘솔에서 CR 인스턴스를 구성할 수 있는 YAML 편집기가 열립니다.
CR의
spec
섹션에서env
요소를 추가하고 AMQ Broker 컨테이너에 설정할 환경 변수를 추가합니다. 예를 들면 다음과 같습니다.apiVersion: broker.amq.io/v1beta1 kind: ActiveMQArtemis metadata: name: ex-aao spec: ... env: - name: TZ value: Europe/Vienna - name: JAVA_ARGS_APPEND value: --Hawtio.realm=console - name: JDK_JAVA_OPTIONS value: -XshowSettings:system ...
이 예에서 CR 구성에는 다음 환경 변수가 포함됩니다.
-
TZ
: AMQ Broker 컨테이너의 시간대를 설정합니다. -
인증을 위해
console
이라는 영역을 사용하도록 AMQ 관리 콘솔을 구성하도록JAVA_ARGS_APPEND
JDK_JAVA_OPTIONS
: Java Virtual Machine의 시스템 속성 설정을 표시하는 Java-XshowSettings:system
매개변수를 설정합니다.참고JDK_JAVA_OPTIONS
환경 변수를 사용하여 구성된 값은 Java 시작자가 사용하는 명령줄 인수 앞에 추가됩니다.JAVA_ARGS_APPEND
환경 변수를 사용하여 구성된 값은 시작자가 사용하는 인수에 추가됩니다. 인수가 중복되면 가장 오른쪽 인수가 우선합니다.
-
CR을 저장합니다.
참고Red Hat은
AMQ_
접두사가 있는 AMQ Broker 환경 변수를 변경하지 않고POD_NAMESPACE
변수를 변경하려는 경우 주의해야 합니다.
추가 리소스
- 환경 변수 정의에 대한 자세한 내용은 컨테이너에 대한 환경 변수 정의를 참조하십시오.
4.10. 브로커의 기본 메모리 제한 덮어쓰기
브로커에 설정된 기본 메모리 제한을 덮어쓸 수 있습니다. 기본적으로 브로커는 브로커의 Java Virtual Machine에서 사용할 수 있는 최대 메모리의 절반이 할당됩니다. 다음 절차에서는 브로커 배포에 대해 사용자 정의 리소스(CR) 인스턴스를 구성하여 기본 메모리 제한을 재정의하는 방법을 보여줍니다.
사전 요구 사항
- CR 인스턴스를 사용하여 기본 브로커 배포를 생성하는 방법을 숙지해야 합니다. 3.4.1절. “기본 브로커 인스턴스 배포”을 참조하십시오.
프로세스
기본 브로커 배포를 생성하려면 CR(사용자 정의 리소스) 인스턴스 구성을 시작합니다.
OpenShift 명령줄 인터페이스 사용:
브로커 배포를 위해 프로젝트에 CR을 배포할 수 있는 권한이 있는 사용자로 OpenShift에 로그인합니다.
oc login -u <user> -p <password> --server=<host:port>
-
다운로드 및 추출한 Operator 설치 아카이브의
deploy/crs
디렉터리에 포함된broker_activemqartemis_cr.yaml
이라는 샘플 CR 파일을 엽니다.
OpenShift Container Platform 웹 콘솔 사용:
- 브로커 배포를 위해 프로젝트에 CR을 배포할 권한이 있는 사용자로 콘솔에 로그인합니다.
- 기본 브로커 CRD를 기반으로 새 CR 인스턴스를 시작합니다. 왼쪽 창에서 → 를 클릭합니다.
- ActiveMQArtemis CRD를 클릭합니다.
- Instances 탭을 클릭합니다.
Create ActiveMQArtemis 를 클릭합니다.
콘솔에서 YAML 편집기가 열리고 CR 인스턴스를 구성할 수 있습니다.
예를 들어 기본 브로커 배포의 CR은 다음과 유사할 수 있습니다.
apiVersion: broker.amq.io/v1beta1 kind: ActiveMQArtemis metadata: name: ex-aao spec: deploymentPlan: size: 1 image: placeholder requireLogin: false persistenceEnabled: true journalType: nio messageMigration: true
CR의
spec
섹션에brokerProperties
섹션을 추가합니다.brokerProperties
섹션 내에서globalMaxSize
속성을 추가하고 메모리 제한을 지정합니다. 예를 들면 다음과 같습니다.spec: ... brokerProperties: - globalMaxSize=500m ...
globalMaxSize
속성의 기본 단위는 바이트입니다. 기본 단위를 변경하려면 m(MB의 경우) 접미사 또는 g(for GB)를 값에 추가합니다.CR에 변경 사항을 적용합니다.
OpenShift 명령줄 인터페이스 사용:
- CR 파일을 저장합니다.
브로커 배포를 위해 프로젝트로 전환합니다.
$ oc project <project_name>
CR을 적용합니다.
$ oc apply -f <path/to/broker_custom_resource_instance>.yaml
OpenShift 웹 콘솔 사용:
- CR 편집을 완료하면 저장을 클릭합니다.
(선택 사항)
globalMaxSize
속성에 설정한 새 값이 브로커에 할당된 기본 메모리 제한을 재정의하는지 확인합니다.- AMQ 관리 콘솔에 연결합니다. 자세한 내용은 5장. Operator 기반 브로커 배포를 위한 AMQ 관리 콘솔에 연결의 내용을 참조하십시오.
- 메뉴에서 Cryostat를 선택합니다.
- org.apache.activemq.artemis 를 선택합니다.
-
글로벌
검색 . -
표시된 표에서 Global max 열의 값이
globalMaxSize
속성에 대해 구성한 값과 같은지 확인합니다.
4.11. 사용자 정의 Init Container 이미지 지정
4.1절. “Operator에서 브로커 구성을 생성하는 방법” 에 설명된 대로 AMQ Broker Operator는 기본 기본 제공 Init 컨테이너를 사용하여 브로커 구성을 생성합니다. 구성을 생성하기 위해 Init Container는 배포에 기본 CR(사용자 정의 리소스) 인스턴스를 사용합니다. 경우에 따라 사용자 지정 Init Container를 사용해야 할 수 있습니다. 예를 들어 브로커 설치 디렉터리에 런타임 종속성 .jar
파일을 추가로 포함하려면 다음을 수행합니다.
사용자 정의 Init Container 이미지를 빌드할 때 다음과 같은 중요한 지침을 따라야 합니다.
사용자 정의 이미지에 대해 생성하는 빌드 스크립트(예: Docker Dockerfile 또는 Podman Containerfile)에서
FROM
명령은 최신 버전의 AMQ Broker Operator 내장 Init Container를 기본 이미지로 지정해야 합니다. 스크립트에서 다음 행을 포함합니다.FROM registry.redhat.io/amq7/amq-broker-init-rhel8:7.12
-
사용자 지정 이미지에는
/amq/scripts
라는 디렉터리에 포함하는post-config.sh
라는 스크립트가 포함되어야 합니다.post-config.sh
스크립트는 Operator가 생성하는 초기 구성을 수정하거나 추가할 수 있는 위치입니다. 사용자 정의 Init Container를 지정하면 Operator는 CR 인스턴스를 사용한 후 브로커 애플리케이션 컨테이너를 시작하기 전에post-config.sh
스크립트를 실행합니다. -
4.1.2절. “브로커 Pod의 디렉터리 구조” 에 설명된 대로 Init Container에서 사용하는 설치 디렉터리의 경로는
CONFIG_INSTANCE_DIR
이라는 환경 변수에 정의됩니다. 설치 디렉토리(예:${CONFIG_INSTANCE_DIR}/lib
) 및 이 변수의 실제 값(예:/amq/init/config/lib
)을 참조할 때post-config.sh
스크립트에서 이 환경 변수 이름을 사용해야 합니다. -
사용자 지정 브로커 구성에 추가 리소스(예:
.xml
또는.jar
파일)를 포함하려면 사용자 지정 이미지에 포함되어post-config.sh
스크립트에 액세스할 수 있는지 확인해야 합니다.
다음 절차에서는 사용자 정의 Init Container 이미지를 지정하는 방법을 설명합니다.
사전 요구 사항
- 위에서 설명한 지침을 충족하는 사용자 정의 Init Container 이미지를 빌드해야 합니다. ArtemisCloud Operator에 대한 사용자 정의 Init Container 이미지를 빌드하고 지정하는 전체 예제는 JDBC 기반 지속성에 대한 사용자 정의 Init Container 이미지를 참조하십시오.
- AMQ Broker Operator에 대한 사용자 정의 Init Container 이미지를 제공하려면 Quay 컨테이너 레지스트리와 같은 컨테이너 레지스트리의 리포지토리에 이미지를 추가할 수 있어야 합니다.
- Operator에서 Init Container를 사용하여 브로커 구성을 생성하는 방법을 이해해야 합니다. 자세한 내용은 4.1절. “Operator에서 브로커 구성을 생성하는 방법”의 내용을 참조하십시오.
- CR을 사용하여 브로커 배포를 생성하는 방법을 숙지해야 합니다. 자세한 내용은 3.4절. “Operator 기반 브로커 배포 생성”의 내용을 참조하십시오.
프로세스
브로커 배포의 CR 인스턴스를 편집합니다.
OpenShift 명령줄 인터페이스 사용:
- 브로커 배포를 위해 프로젝트에 CR을 배포할 수 있는 권한이 있는 사용자로 OpenShift Container Platform에 로그인합니다.
배포에 사용할 CR을 편집합니다.
oc edit ActiveMQArtemis <CR instance name> -n <namespace>
OpenShift Container Platform 웹 콘솔 사용:
- 브로커 배포를 위해 프로젝트에 CR을 배포할 수 있는 권한이 있는 사용자로 OpenShift Container Platform에 로그인합니다.
- 왼쪽 창에서 → 를 클릭합니다.
- ActiveMQArtemis CRD를 클릭합니다.
- Instances 탭을 클릭합니다.
- 브로커 배포에 사용할 인스턴스를 클릭합니다.
YAML 탭을 클릭합니다.
콘솔에서 YAML 편집기가 열리고 CR 인스턴스를 편집할 수 있습니다.
CR의
deploymentPlan
섹션에서initImage
속성을 추가하고 사용자 정의 Init Container 이미지의 URL로 값을 설정합니다.apiVersion: broker.amq.io/v1beta1 kind: ActiveMQArtemis metadata: name: ex-aao spec: deploymentPlan: size: 1 image: placeholder initImage: <custom_init_container_image_url> requireLogin: false persistenceEnabled: true journalType: nio messageMigration: true
initImage
컨테이너 레지스트리에서 사용할 수 있어야 하는 사용자 정의 Init Container 이미지의 전체 URL을 지정합니다.
중요CR에
spec.deploymentPlan.initImage
속성에 지정된 사용자 지정 init 컨테이너 이미지가 있는 경우, 브로커 이미지의 자동 업그레이드를 방지하기 위해spec.deploymentPlan.image
속성에 해당 브로커 컨테이너 이미지의 URL도 지정하는 것이 좋습니다.spec.deploymentPlan.image
속성에 특정 브로커 컨테이너 이미지의 URL을 지정하지 않으면 브로커 이미지를 자동으로 업그레이드할 수 있습니다. 브로커 이미지가 업그레이드되면 브로커 및 사용자 정의 init 컨테이너 이미지가 다르므로 브로커가 실행되지 않을 수 있습니다.사용자 지정 init 컨테이너가 있는 작업 중인 배포가 있는 경우 브로커 컨테이너 이미지의 추가 업그레이드를 방지하여 사용자 정의 init 컨테이너 이미지로 작동하지 않는 최신 브로커 이미지의 위험을 제거할 수 있습니다. 브로커 이미지로 업그레이드하지 않는 방법에 대한 자세한 내용은 6.6.2절. “이미지 URL을 사용하여 이미지 자동 업그레이드 제한” 을 참조하십시오.
- CR을 저장합니다.
추가 리소스
- ArtemisCloud Operator에 대한 사용자 정의 Init Container 이미지를 빌드하고 지정하는 전체 예제는 JDBC 기반 지속성에 대한 사용자 정의 Init Container 이미지를 참조하십시오.
4.12. 클라이언트 연결을 위한 Operator 기반 브로커 배포 구성
4.12.1. 어셉터 구성
OpenShift 배포에서 브로커 Pod에 대한 클라이언트 연결을 활성화하려면 배포에 대한 허용자를 정의합니다. 승인자는 브로커 pod에서 연결을 허용하는 방법을 정의합니다. 브로커 배포에 사용되는 기본 CR(사용자 정의 리소스)에 허용자를 정의합니다. 어셉터를 생성할 때 수락자에서 활성화할 메시징 프로토콜과 이러한 프로토콜에 사용할 브로커 Pod의 포트와 같은 정보를 지정합니다.
프로세스
-
브로커 배포에 대한
ActiveMQArtemis
CR(사용자 정의 리소스)을 편집합니다. acceptors
특성에 이름이 지정된 어셉터를 추가합니다.프로토콜
및포트
속성을 추가합니다. 값을 설정하여 어셉터에서 사용할 메시징 프로토콜과 해당 프로토콜에 노출할 각 브로커 Pod의 포트를 지정합니다. 예를 들면 다음과 같습니다.spec: .. acceptors: - name: my-acceptor protocols: amqp port: 5672 ..
구성된 수락자는 포트 5672를 AMQP 클라이언트에 노출합니다.
protocols
특성에 지정할 수 있는 전체 값 세트가 표에 표시됩니다.표 4.4. acceptor 프로토콜 프로토콜 현재의 코어 프로토콜
코어
AMQP
amqp
OpenWire
OpenWire
MQTT
mqtt
STOMP
stomp
지원되는 모든 프로토콜
all
참고- 배포의 각 브로커 Pod에 대해 Operator는 포트 61616을 사용하는 기본 수락자도 생성합니다. 이 기본 수락자는 브로커 클러스터링에 필요하며 코어 프로토콜이 활성화되어 있습니다.
- 기본적으로 AMQ Broker 관리 콘솔은 브로커 Pod에서 포트 8161을 사용합니다. 배포의 각 브로커 포드에는 콘솔에 대한 액세스를 제공하는 전용 서비스가 있습니다. 자세한 내용은 5장. Operator 기반 브로커 배포를 위한 AMQ 관리 콘솔에 연결의 내용을 참조하십시오.
동일한 수락자에서 다른 프로토콜을 사용하려면
protocols
속성을 수정합니다. 쉼표로 구분된 프로토콜 목록을 지정합니다. 예를 들면 다음과 같습니다.spec: .. acceptors: - name: my-acceptor protocols: amqp,openwire port: 5672 ...
구성된 수락자는 이제 포트 5672를 AMQP 및 OpenWire 클라이언트에 노출합니다.
허용자가 허용하는 동시 클라이언트 연결 수를 지정하려면
connectionsAllowed
속성을 추가하고 값을 설정합니다. 예를 들면 다음과 같습니다.spec: ... acceptors: - name: my-acceptor protocols: amqp,openwire port: 5672 connectionsAllowed: 5 ...
기본적으로 수락자는 브로커 배포와 동일한 OpenShift 클러스터의 클라이언트에만 노출됩니다. OpenShift 외부의 클라이언트에 어셉터도 노출하려면
expose
속성과sslEnabled
속성을 모두true
로 설정합니다.spec: ... acceptors: - name: my-acceptor protocols: amqp,openwire port: 5672 connectionsAllowed: 5 expose: true sslEnabled: true ...
수락자(또는 커넥터)에서 SSL(즉, Secure Sockets Layer) 보안을 활성화하면 다음과 같은 관련 구성을 추가할 수 있습니다.
- OpenShift 클러스터에 인증 자격 증명을 저장하는 데 사용되는 시크릿 이름입니다. 수락자에서 SSL을 활성화할 때 시크릿이 필요합니다.
-
보안 네트워크 통신에 사용할 TLS(Transport Layer Security) 프로토콜입니다. TLS는 더 안전한 SSL 버전입니다.
enabledProtocols
속성에 TLS 프로토콜을 지정합니다. -
수락자가 브로커와 클라이언트 간의 상호 인증이라고도 하는 mTLS를 사용하는지 여부입니다.
needClientAuth
속성 값을true
로 설정하여 이 값을 지정합니다.
이러한 작업에 대한 자세한 내용은 4.12.2절. “broker-client 연결 보안” 을 참조하십시오.
OpenShift 외부의 클라이언트에 어셉터를 노출하면 Operator는 배포의 각 브로커 Pod에서 수락자를 위한 전용 서비스와 Openshift 경로를 자동으로 생성합니다.
각 pod에서 허용자가 Openshift 클러스터의 내부 라우팅 구성과 일치하도록 허용되는 경로의 호스트 이름을 사용자 지정하려면 다음 중 하나 또는 둘 다를 수행할 수 있습니다.
-
ingressHost
특성을 사용하여 기본 호스트 이름을 특정 수락자의 사용자 지정 호스트 이름으로 바꿉니다. ingressDomain
특성을 사용하여 호스트 이름에 사용자 지정 도메인을 추가합니다. 사용자 정의 도메인은 CR 구성에 의해 노출되는 다른 어셉터 및 콘솔과 같은 다른 모든 경로에도 적용됩니다.acceptor 경로에 사용자 정의 호스트 이름을 설정하려면
ingressHost
속성을 추가하고 호스트 문자열을 지정합니다. 예를 들면 다음과 같습니다.spec: ... acceptors: - name: my-acceptor protocols: amqp,openwire port: 5672 connectionsAllowed: 5 expose: true ingressHost: my-acceptor-production.my-subdomain.com ...
참고ingressHost
값은 Openshift 클러스터에서 고유해야 합니다. 브로커 클러스터에 브로커 Pod가 여러 개 있는 경우 값에 $(BROKER_ORDINAL) 변수를 포함하여ingressHost
값을 고유하게 만들 수 있습니다. Operator는 각 브로커 Pod의 이 변수를 Pod에 할당된 StatefulSet의 서수로 바꿉니다. 예를 들어,my-acceptor-$(BROKER_ORDINAL)-production.my-subdomain.com의
ingressHost
값을 첫 번째 Pod의my-acceptor-0-production.my-subdomain
으로 설정합니다. my-acceptor-1-production.my-subdomain은 두 번째 Pod의my-acceptor-1-production.my-subdomain
으로 설정합니다.허용자 경로에 대한 사용자 정의 호스트 이름 문자열에 다음 변수를 포함할 수 있습니다.
표 4.5. acceptor 경로에 대한 사용자 정의 호스트 이름 문자열의 변수 이름 설명 $(CR_NAME)
CR의
metadata.name
속성 값입니다.$(CR_NAMESPACE)
사용자 정의 리소스의 네임스페이스입니다.
$(BROKER_ORDINAL)
StatefulSet에서 브로커 Pod에 할당한 서수입니다.
$(ITEM_NAME)
수락자의 이름입니다.
$(RES_TYPE)
리소스 유형입니다. 경로에는
rte
의 리소스 유형이 있습니다. 수신에는 리소스 유형의ing
이 있습니다.$(INGRESS_DOMAIN)
CR에 구성된 경우
spec.ingressDomain
속성의 값입니다.경로의 호스트 이름에 사용자 정의 도메인을 추가하려면
spec.ingressDomain
속성을 추가하고 사용자 정의 문자열을 지정합니다. 예를 들면 다음과 같습니다.spec: ... ingressDomain: my.domain.com
-
조직의 네트워크 정책에서 경로 대신 Ingress를 사용하여 수락자를 노출해야 하는 경우 다음 단계를 완료합니다.
exposeMode
속성을 추가하고 값을ingress
로 설정합니다.spec: ... acceptors: - name: my-acceptor protocols: amqp,openwire port: 5672 connectionsAllowed: 5 expose: true exposeMode: ingress ...
허용자가 Openshift 클러스터의 내부 라우팅 구성과 일치하도록 노출된 Ingress의 호스트 이름을 사용자 지정하려면 다음 중 하나 또는 둘 다를 수행할 수 있습니다.
-
ingressHost
특성을 사용하여 기본 호스트 이름을 사용자 지정 호스트 이름으로 교체합니다. ingressDomain
특성을 사용하여 호스트 이름에 사용자 지정 도메인을 추가합니다. 사용자 정의 도메인은 CR 구성에 의해 노출되는 다른 어셉터 및 콘솔의 Ingress와 같은 기타 모든 수신에도 적용됩니다.acceptor의 Ingress에 대한 사용자 정의 호스트 이름을 설정하려면
ingressHost
속성을 추가하고 호스트 문자열을 지정합니다. 예를 들면 다음과 같습니다.spec: ... acceptors: - name: my-acceptor protocols: amqp,openwire port: 5672 connectionsAllowed: 5 expose: true exposeMode: ingress ingressHost: my-acceptor-production.my-subdomain.com ...
동일한 변수를 포함하여 이 절차의 앞부분에서 설명하는 경로 호스트로 수신 호스트를 사용자 지정할 수 있습니다.
Ingress의 호스트 이름에 사용자 정의 도메인을 추가하려면
spec.ingressDomain
속성을 추가하고 사용자 지정 문자열을 지정합니다. 예를 들면 다음과 같습니다.spec: ... ingressDomain: my-subdomain.domain.com
어셉터의 경우 수신의 기본 호스트 이름은 <
cr-name>-<acceptor name>-<ordinal>-svc-ing-<namespace
> 형식으로 되어 있습니다. 예를 들어amqbroker
네임 스페이스에production
이라는 CR이 있는 경우mydomain.com
의ingressDomain
값은 Pod 0에서 생성된 수신에 대해production-wconsj-0-svc-svc-mynamespace.amqbroker.com
의 호스트 값을 제공합니다.
-
추가 리소스
- 인증 인증 정보를 저장할 시크릿 생성을 포함하여 브로커-클라이언트 연결을 보호하도록 TLS를 구성하는 방법을 알아보려면 4.12.2절. “broker-client 연결 보안” 를 참조하십시오.
- 어셉터 및 커넥터 구성을 포함한 전체 사용자 정의 리소스 구성 참조는 8.1절. “사용자 정의 리소스 구성 참조” 에서 참조하십시오.
4.12.2. broker-client 연결 보안
수락자 또는 커넥터(즉, sslEnabled
를 true
로 설정하여 보안)에서 보안을 활성화한 경우 브로커와 클라이언트 간의 인증서 기반 인증을 허용하도록 TLS(Transport Layer Security)를 구성해야 합니다. TLS는 더 안전한 SSL 버전입니다. 두 가지 기본 TLS 구성이 있습니다.
- TLS
- 브로커만 인증서를 제공합니다. 인증서는 클라이언트가 브로커를 인증하는 데 사용됩니다. 가장 일반적인 구성입니다.
- mTLS
- 브로커와 클라이언트 모두 인증서를 제공합니다. 이를 상호 인증 이라고 합니다.
다양한 방법을 사용하여 TLS 인증서를 생성할 수 있습니다.
브로커와 클라이언트가 동일한 Openshift 클러스터에서 실행되는 경우 Openshift를 사용하여 브로커의 서비스 제공 인증서를 생성할 수 있습니다.
브로커 및 클라이언트가 동일한 Openshift 클러스터에서 실행되지 않는 경우 인증서를 사용자 지정할 수 있는 방법을 사용하여 인증서를 생성해야 합니다. 이 섹션에서는 사용자 정의 인증서를 생성하는 데 사용할 수 있는 두 가지 방법에 대해 설명합니다.
- cert-manager Operator for Openshift
- Java Keytool 유틸리티.
4.12.2.1. Openshift 서비스 제공 인증서 사용
동일한 Openshift 클러스터에서 브로커와 클라이언트 간에 내부 연결을 보호하려면 acceptor 서비스에 주석을 추가하여 Openshift에서 서비스 제공 인증서를 생성하도록 요청할 수 있습니다. 생성된 인증서 및 키는 PEM 형식이며, 생성된 보안의 tls.crt
및 tls.key
에 각각 저장됩니다.
서비스 인증서를 발급하는 서비스 CA 인증서는 26개월 동안 유효하며 유효 기간이 13개월 미만으로 남아 있으면 자동으로 순환됩니다. 교체 후에도 이전 서비스 CA 구성은 만료될 때까지 계속 신뢰 상태가 유지됩니다. 그러면 만료되기 전에 유예 기간 동안 영향을 받는 모든 서비스의 주요 자료를 새로 고칠 수 있습니다. 서비스를 다시 시작하고 키 자료를 새로 고치는 이 유예 기간 동안 클러스터를 업그레이드하지 않으면 이전 서비스 CA가 만료된 후 실패하지 않도록 서비스를 직접 다시 시작해야 할 수도 있습니다.
프로세스
-
브로커 배포에 사용할
ActiveMQArtemis
CR(사용자 정의 리소스)을 편집합니다. resourceTemplates
속성을 사용하여 수락자에 대해 생성된 서비스에 주석을 답니다. 예를 들면 다음과 같습니다.spec: ... resourceTemplates: - selector: kind: Service name: amq-broker-myacceptor-0-svc annotations: service.beta.openshift.io/serving-cert-secret-name: myacceptor-ptls ...
- resourceTemplates.selector.kind
-
사용자 지정이 적용되는 리소스 유형을
Service
로 지정합니다. - resourceTemplates.selector.name
주석을 적용할 서비스의 이름을 지정합니다. 수락 서비스의 이름 형식은 <
CR name><acceptor name><ordinal>-svc
, 여기서:-
<CR name> name은 CR의
metadata.name
속성 값입니다. -
<acceptor name>은 어셉터의 이름입니다. 이 예제에서는 어셉터 이름이
myacceptor
라고 가정합니다. - <ordinal>은 StatefulSet에서 브로커 Pod에 할당된 서수입니다.
-
<CR name> name은 CR의
- resourceTemplates.annotations
service.beta.openshift.io/serving-cert-secret-name: < secret
>의 주석을 지정합니다. 여기서 <secret>은 Openshift가 서비스에 생성하는 시크릿의 이름입니다.참고시크릿 이름은 acceptor 이름과 일치해야 하며
-ptls
접미사가 있어야 합니다. Operator에서 시크릿을 생성하기 전에 CR을 배포할 수 있도록 하려면 특정 접미사가 필요합니다.
CR의 sslSecret' 속성에서 브로커 인증서가 포함된 보안을 지정합니다. 예를 들면 다음과 같습니다.
spec: acceptors: - name: myacceptor protocols: CORE port: 61626 sslEnabled: true sslSecret: myacceptor-ptls
brokerProperties
속성에서 인증서가 Openshift에서 갱신될 때마다 새 인증서를 자동으로 로드하도록 브로커를 구성합니다. 예를 들면 다음과 같습니다.spec: ... brokerProperties - "acceptorConfigurations.myacceptor.params.sslAutoReload=true" ...
- 서비스 제공 인증서의 공개 키를 각 클라이언트의 신뢰 저장소에 추가합니다.
브로커와 클라이언트 간에 mTLS 인증을 구성하려면 다음 단계를 완료합니다.
-
브로커가 신뢰할 각 클라이언트의 인증서가 포함된 신뢰 번들을 생성하고 시크릿(예:
trusted-clients-bundle
)에 신뢰 번들을 추가합니다. 브로커 CR에 구성된 승인자에서
needClientAuth
속성을 추가하고 클라이언트 인증을 요구하도록true
로 설정합니다. 예를 들면 다음과 같습니다.spec: .. acceptors: - name: myacceptor protocols: all port: 62666 sslEnabled: true sslSecret: myacceptor-ptls needClientAuth: true ..
각 수락자의
trustSecret
속성에서 클라이언트 인증서의 신뢰 번들이 포함된 보안을 지정합니다. 예를 들면 다음과 같습니다.spec: .. acceptors: - name: new-acceptor protocols: all port: 62666 sslEnabled: true sslSecret: myacceptor-ptls needClientAuth: true trustSecret: trusted-clients-bundle ..
-
브로커가 신뢰할 각 클라이언트의 인증서가 포함된 신뢰 번들을 생성하고 시크릿(예:
- CR을 저장합니다.
추가 리소스
4.12.2.2. Openshift에 cert-manager Operator 사용
cert-manager Operator for OpenShift는 애플리케이션 인증서 라이프사이클 관리를 제공하는 클러스터 전체 서비스입니다. cert-manager는 다양한 인증 기관의 TLS 인증서 관리를 자동화합니다.
다음 예제 절차에서는 자체 서명된 인증서를 사용하여 TLS(Transport Layer Security)를 구성하는 방법을 설명합니다. 정책에 인식된 인증서 관리자가 서명한 인증서가 필요한 경우 OpenShift 용 cert-manager Operator를 사용하여 인증서를 요청할 수 있습니다.
사전 요구 사항
cert-manager Operator for Red Hat OpenShift가 설치되어 있습니다.
자세한 내용은 OpenShift Container Platform 설명서에서 cert-manager Operator for Red Hat OpenShift 설치를 참조하십시오.
브로커와 클라이언트 간에 mTLS를 구성하려면 Kubernetes에 대한 신뢰 관리자가 설치됩니다.
자세한 내용은 trust-manager 설치를 참조하십시오.
프로세스
자체 서명된 발행자를 정의하는 YAML 파일(예:
self-signed-issuer.yaml
)을 생성합니다. 발행자는 인증서 서명 요청을 준수하여 서명된 인증서를 생성할 수 있는 CA(인증 기관)를 나타내는 Openshift 리소스입니다.다음 예제 yaml은 자체 서명된 발급자를 생성하여 이를 사용하여 인증 기관(CA) 인증서를 생성할 수 있습니다. CA 인증서는 cert-manager Operator에서 관리할 수 있습니다.
apiVersion: cert-manager.io/v1 kind: ClusterIssuer metadata: name: root-issuer spec: selfSigned: {}
루트 CA 인증서를 정의하는 YAML 파일(예:
root-ca.yaml
)을 생성합니다.issuerRef.name
필드에서 사용자가 생성한 자체 서명된 발급자인root-issuer
의 이름을 지정합니다. 예를 들면 다음과 같습니다.apiVersion: cert-manager.io/v1 kind: Certificate metadata: name: root-ca namespace: cert-manager spec: isCA: true commonName: "amq.io.root" secretName: root-ca-secret subject: organizations: - "www.amq.io" issuerRef: name: root-issuer kind: ClusterIssuer
인증서는
root-ca-secret
이라는 시크릿의 Privacy Enhanced mail (PEM) 형식으로 생성됩니다.루트 CA에서 서명한 인증서 발행을 위한 CA 발행자를 정의하는 YAML 파일(예:
root-ca-issuer.yaml
)을 생성합니다. 예를 들면 다음과 같습니다.apiVersion: cert-manager.io/v1 kind: ClusterIssuer metadata: name: root-ca-issuer spec: ca: secretName: root-ca-secret
브로커 인증서를 정의하는 YAML 파일(예:
broker-cert.yaml
)을 생성합니다.issuerRef.Name
필드에서 루트 CA에서 서명한 인증서를 발행하기 위해 생성한 발급자인root-ca-issuer
의 이름을 지정합니다. 예를 들면 다음과 같습니다.apiVersion: cert-manager.io/v1 kind: Certificate Metadata: name: broker-cert spec: isCA: false commonName: “amq.io” dnsNames: - “amq-broker-ss-0.amq-broker-svc-rte-default.cluster.local - “amq-broker-ss-1.amq-broker-svc-rte-default.cluster.local secretName: broker-cert-secret subject: organizations: - “www.amq.io” issuerRef: name: root-ca-issuer kind: ClusterIssuer
YAML 파일에서 발행자 및 인증서에 대해 정의한 사용자 정의 리소스를 배포하여 해당 OpenShift 오브젝트를 생성합니다. 예를 들면 다음과 같습니다.
$ oc create -f self-signed-issuer.yaml $ oc create -f root-ca.yaml $ oc create -f root-ca-issuer.yaml $ oc create -f broker-cert.yaml
-
브로커 배포를 위해
ActiveMQArtemis
CR을 편집합니다. 보안하려는 각 수락자의
sslSecret
속성에 브로커 인증서가 포함된 보안을 지정합니다. 예를 들면 다음과 같습니다.spec: .. acceptors: - name: new-acceptor protocols: all port: 62666 sslEnabled: true needClientAuth: false sslSecret: broker-cert-secret ..
brokerProperties
속성에서 cert-manager Operator가 Openshift용 cert-manager Operator에 의해 갱신될 때마다 수락자에 대한 새 브로커 인증서를 자동으로 로드하도록 브로커를 구성합니다. 예를 들면 다음과 같습니다.spec: ... brokerProperties - "acceptorConfigurations.new-acceptor.params.sslAutoReload=true" ...
-
클라이언트가 브로커를 신뢰할 수 있도록 이 예제 프로세스의
root-ca-secret
시크릿에 생성된 브로커 인증서에 서명한 루트 CA 인증서를 각 클라이언트의 신뢰 저장소에 추가합니다. 브로커와 클라이언트 간에 mTLS 인증을 구성하려면 다음 단계를 완료합니다.
-
Kubernetes용 Trust Manager를 사용하여 브로커가 신뢰하려는 각 클라이언트의 인증서가 포함된 신뢰 번들을 생성하고 시크릿(예:
trusted-clients-bundle
)에 신뢰 번들을 추가합니다. 신뢰 번들을 생성하는 방법에 대한 자세한 내용은 trust-manager 설명서 를 참조하십시오. 브로커 CR에 구성된 승인자에서
needClientAuth
속성을 추가하고 클라이언트 인증을 요구하도록true
로 설정합니다. 예를 들면 다음과 같습니다.spec: .. acceptors: - name: new-acceptor protocols: all port: 62666 sslEnabled: true sslSecret: broker-cert-secret needClientAuth: true ..
각 수락자의
trustSecret
속성에서 클라이언트 인증서의 신뢰 번들이 포함된 보안을 지정합니다. 예를 들면 다음과 같습니다.spec: .. acceptors: - name: new-acceptor protocols: all port: 62666 sslEnabled: true sslSecret: broker-cert-secret needClientAuth: true trustSecret: trusted-clients-bundle ..
-
Kubernetes용 Trust Manager를 사용하여 브로커가 신뢰하려는 각 클라이언트의 인증서가 포함된 신뢰 번들을 생성하고 시크릿(예:
- CR을 저장합니다.
4.12.2.3. Java keytool 유틸리티 사용
keytool은 Java에 포함된 인증서 관리 유틸리티입니다.
4.12.2.3.1. 단방향 TLS 구성
이 섹션의 절차에서는 브로커-클라이언트 연결을 보호하도록 단방향 TLS(Transport Layer Security)를 구성하는 방법을 보여줍니다.
단방향 TLS에서는 브로커만 인증서를 제공합니다. 이 인증서는 클라이언트가 브로커를 인증하는 데 사용됩니다.
사전 요구 사항
- 클라이언트가 호스트 이름 확인을 사용하는 경우 브로커 인증서 생성의 요구 사항을 이해해야합니다. 자세한 내용은 4.12.2.4절. “호스트 이름 확인을 위해 브로커 인증서 구성”의 내용을 참조하십시오.
프로세스
브로커 키 저장소에 대한 자체 서명 인증서를 생성합니다.
$ keytool -genkey -alias broker -keyalg RSA -keystore ~/broker.ks
클라이언트와 공유할 수 있도록 브로커 키 저장소에서 인증서를 내보냅니다. Base64로 인코딩된
.pem
형식으로 인증서를 내보냅니다. 예를 들면 다음과 같습니다.$ keytool -export -alias broker -keystore ~/broker.ks -file ~/broker_cert.pem
클라이언트에서 브로커 인증서를 가져오는 클라이언트 신뢰 저장소를 생성합니다.
$ keytool -import -alias broker -keystore ~/client.ts -file ~/broker_cert.pem
관리자로 OpenShift Container Platform에 로그인합니다. 예를 들면 다음과 같습니다.
$ oc login -u system:admin
브로커 배포가 포함된 프로젝트로 전환합니다. 예를 들면 다음과 같습니다.
$ oc project <my_openshift_project>
TLS 인증 정보를 저장할 시크릿을 생성합니다. 예를 들면 다음과 같습니다.
$ oc create secret generic my-tls-secret \ --from-file=broker.ks=~/broker.ks \ --from-file=client.ts=~/client.ks \ --from-literal=keyStorePassword=<password> \ --from-literal=trustStorePassword=<password>
참고시크릿을 생성할 때 OpenShift에서 키 저장소와 신뢰 저장소를 모두 지정해야 합니다. 신뢰 저장소 키는 일반적으로
client.ts
로 이름이 지정됩니다. 브로커와 클라이언트 간의 단방향 TLS의 경우 실제로 신뢰 저장소가 필요하지 않습니다. 그러나 보안을 성공적으로 생성하려면 일부 유효한 저장소 파일을client.ts
의 값으로 지정해야 합니다. 이전 단계에서는 이전에 생성한 브로커 키 저장소 파일을 재사용하여client.ts
의 "더미" 값을 제공합니다. 이는 단방향 TLS에 필요한 모든 인증 정보를 사용하여 보안을 생성하는 데 충분합니다.Operator를 설치할 때 생성한 서비스 계정에 보안을 연결합니다. 예를 들면 다음과 같습니다.
$ oc secrets link sa/amq-broker-operator secret/my-tls-secret
보안 수락자 또는 커넥터의
sslSecret
매개변수에 시크릿 이름을 지정합니다. 예를 들면 다음과 같습니다.spec: ... acceptors: - name: my-acceptor protocols: amqp,openwire port: 5672 sslEnabled: true sslSecret: my-tls-secret expose: true connectionsAllowed: 5 ...
4.12.2.3.2. 양방향 TLS 구성
이 섹션의 절차에서는 브로커-클라이언트 연결을 보호하도록 양방향 TLS(Transport Layer Security)를 구성하는 방법을 보여줍니다.
양방향 TLS에서 브로커와 클라이언트 모두 인증서를 제공합니다. 브로커 및 클라이언트는 이러한 인증서를 사용하여 때때로 상호 인증 이라는 프로세스에서 서로 인증합니다.
사전 요구 사항
- 클라이언트가 호스트 이름 확인을 사용하는 경우 브로커 인증서 생성의 요구 사항을 이해해야합니다. 자세한 내용은 4.12.2.4절. “호스트 이름 확인을 위해 브로커 인증서 구성”의 내용을 참조하십시오.
프로세스
브로커 키 저장소에 대한 자체 서명 인증서를 생성합니다.
$ keytool -genkey -alias broker -keyalg RSA -keystore ~/broker.ks
클라이언트와 공유할 수 있도록 브로커 키 저장소에서 인증서를 내보냅니다. Base64로 인코딩된
.pem
형식으로 인증서를 내보냅니다. 예를 들면 다음과 같습니다.$ keytool -export -alias broker -keystore ~/broker.ks -file ~/broker_cert.pem
클라이언트에서 브로커 인증서를 가져오는 클라이언트 신뢰 저장소를 생성합니다.
$ keytool -import -alias broker -keystore ~/client.ts -file ~/broker_cert.pem
클라이언트에서 클라이언트 키 저장소에 대한 자체 서명된 인증서를 생성합니다.
$ keytool -genkey -alias broker -keyalg RSA -keystore ~/client.ks
클라이언트에서 브로커와 공유할 수 있도록 클라이언트 키 저장소에서 인증서를 내보냅니다. Base64로 인코딩된
.pem
형식으로 인증서를 내보냅니다. 예를 들면 다음과 같습니다.$ keytool -export -alias broker -keystore ~/client.ks -file ~/client_cert.pem
클라이언트 인증서를 가져오는 브로커 신뢰 저장소를 생성합니다.
$ keytool -import -alias broker -keystore ~/broker.ts -file ~/client_cert.pem
관리자로 OpenShift Container Platform에 로그인합니다. 예를 들면 다음과 같습니다.
$ oc login -u system:admin
브로커 배포가 포함된 프로젝트로 전환합니다. 예를 들면 다음과 같습니다.
$ oc project <my_openshift_project>
TLS 인증 정보를 저장할 시크릿을 생성합니다. 예를 들면 다음과 같습니다.
$ oc create secret generic my-tls-secret \ --from-file=broker.ks=~/broker.ks \ --from-file=client.ts=~/broker.ts \ --from-literal=keyStorePassword=<password> \ --from-literal=trustStorePassword=<password>
참고시크릿을 생성할 때 OpenShift에서 키 저장소와 신뢰 저장소를 모두 지정해야 합니다. 신뢰 저장소 키는 일반적으로
client.ts
로 이름이 지정됩니다. 브로커와 클라이언트 간의 양방향 TLS의 경우 클라이언트 인증서가 있으므로 브로커 신뢰 저장소를 포함하는 시크릿을 생성해야 합니다. 따라서 이전 단계에서client.ts
키에 대해 지정하는 값은 실제로 브로커 신뢰 저장소 파일입니다.Operator를 설치할 때 생성한 서비스 계정에 보안을 연결합니다. 예를 들면 다음과 같습니다.
$ oc secrets link sa/amq-broker-operator secret/my-tls-secret
보안 수락자 또는 커넥터의
sslSecret
매개변수에 시크릿 이름을 지정합니다. 예를 들면 다음과 같습니다.spec: ... acceptors: - name: my-acceptor protocols: amqp,openwire port: 5672 sslEnabled: true sslSecret: my-tls-secret expose: true connectionsAllowed: 5 ...
4.12.2.4. 호스트 이름 확인을 위해 브로커 인증서 구성
이 섹션에서는 단방향 또는 양방향 TLS를 구성할 때 생성해야 하는 브로커 인증서에 대한 몇 가지 요구 사항에 대해 설명합니다.
클라이언트가 배포의 브로커 Pod에 연결하려고 하면 클라이언트 연결 URL의 verifyHost
옵션은 클라이언트가 브로커 인증서의 CN(일반 이름)을 호스트 이름과 비교하여 일치하는지 확인합니다. 클라이언트 연결 URL에서 verifyHost=true
또는 이와 유사한 경우 클라이언트가 이 확인을 수행합니다.
예를 들어 브로커가 격리된 네트워크의 OpenShift 클러스터에 배포된 경우와 같이 연결 보안에 대한 우려가 없는 드문 경우 이 확인을 생략할 수 있습니다. 그렇지 않으면 보안 연결을 위해 클라이언트가 이 확인을 수행하는 것이 좋습니다. 이 경우 클라이언트 연결을 성공적으로 수행하려면 브로커 키 저장소 인증서를 올바르게 구성해야 합니다.
일반적으로 클라이언트가 호스트 확인을 사용하는 경우 브로커 인증서를 생성할 때 지정하는 CN은 클라이언트가 연결하는 브로커 Pod의 경로 전체 호스트 이름과 일치해야 합니다. 예를 들어 단일 브로커 Pod가 있는 배포가 있는 경우 CN은 다음과 같을 수 있습니다.
CN=my-broker-deployment-0-svc-rte-my-openshift-project.my-openshift-domain
CN이 여러 브로커가 있는 배포에서 브로커 Pod를 확인할 수 있도록 브로커 Pod 대신 별표(*
) 와일드카드 문자를 지정할 수 있습니다. 예를 들면 다음과 같습니다.
CN=my-broker-deployment-*-svc-rte-my-openshift-project.my-openshift-domain
이전 예에 표시된 CN은 my-broker-deployment
배포의 브로커 Pod로 성공적으로 확인되었습니다.
또한 브로커 인증서를 생성할 때 지정하는 SAN(주체 대체 이름)은 배포의 모든 브로커 Pod를 쉼표로 구분된 목록으로 나열해야 합니다. 예를 들면 다음과 같습니다.
"SAN=DNS:my-broker-deployment-0-svc-rte-my-openshift-project.my-openshift-domain,DNS:my-broker-deployment-1-svc-rte-my-openshift-project.my-openshift-domain,..."
4.12.3. 브로커 배포의 네트워킹 서비스
브로커 배포를 위한 OpenShift Container Platform 웹 콘솔의 네트워킹 창에는 헤드리스 서비스와 ping 서비스라는 두 가지 서비스가 실행되고 있습니다. 헤드리스 서비스의 기본 이름은 < custom_resource_name> -hdls-svc
형식을 사용합니다(예: my-broker-deployment-hdls-svc
). ping 서비스의 기본 이름은 < custom_resource_name> -ping-svc
형식을 사용합니다(예: 'my-broker-deployment-ping-svc
).
헤드리스 서비스는 내부 브로커 클러스터링에 사용되는 포트 61616에 대한 액세스를 제공합니다.
ping 서비스는 브로커가 검색하는 데 사용되며 브로커가 OpenShift 환경 내에서 클러스터를 형성할 수 있습니다. 내부적으로 이 서비스는 포트 8888을 노출합니다.
4.12.4. 내부 및 외부 클라이언트에서 브로커에 연결
이 섹션의 예제에서는 내부 클라이언트(즉, 브로커 배포와 동일한 OpenShift 클러스터에 있는 클라이언트) 및 외부 클라이언트(OpenShift 클러스터 외부의 클라이언트)에서 브로커에 연결하는 방법을 보여줍니다.
4.12.4.1. 내부 클라이언트에서 브로커에 연결
내부 클라이언트를 브로커에 연결하려면 클라이언트 연결 세부 사항에서 브로커 Pod의 DNS 확인 가능 이름을 지정합니다. 예를 들면 다음과 같습니다.
$ tcp://ex–aao-ss-0:<port>
내부 클라이언트가 Core 프로토콜을 사용하고 useTopologyForLoadBalancing=false
키가 연결 URL에 설정되지 않은 경우 클라이언트가 브로커에 처음 연결되면 브로커는 클러스터에 있는 모든 브로커의 주소를 클라이언트에 알릴 수 있습니다. 그러면 클라이언트는 모든 브로커에서 연결을 로드 밸런싱할 수 있습니다.
브로커에 서브스크립션 대기열 또는 요청/응답 대기열이 있는 경우 클라이언트 연결이 부하 분산될 때 이러한 대기열을 사용하는 것과 관련된 경고에 유의하십시오. 자세한 내용은 4.12.4.4절. “ScanSetting 서브스크립션 대기열 또는 응답/요청 대기열이 있을 때 클라이언트 연결을 로드 밸런싱해야 합니다.”의 내용을 참조하십시오.
4.12.4.2. 외부 클라이언트에서 브로커에 연결
허용자를 외부 클라이언트(즉, expose
매개변수 값을 true
로 설정하여)에 어셉터를 노출하면 Operator는 배포의 각 브로커 Pod에 대한 전용 서비스 및 경로를 자동으로 생성합니다.
외부 클라이언트는 브로커 pod에 대해 생성된 경로의 전체 호스트 이름을 지정하여 브로커에 연결할 수 있습니다. 기본 curl
명령을 사용하여 이 전체 호스트 이름에 대한 외부 액세스를 테스트할 수 있습니다. 예를 들면 다음과 같습니다.
$ curl https://my-broker-deployment-0-svc-rte-my-openshift-project.my-openshift-domain
브로커 포드의 전체 호스트 이름은 OpenShift 라우터를 호스팅하는 노드로 확인되어야 합니다. OpenShift 라우터는 호스트 이름을 사용하여 OpenShift 내부 네트워크 내에서 트래픽을 보낼 위치를 결정합니다. 기본적으로 OpenShift 라우터는 비보안(즉, SSL이 아닌) 트래픽과 보안(즉, SSL 암호화) 트래픽을 위해 포트 80을 수신 대기합니다. HTTP 연결의 경우 보안 연결 URL(즉, https
) 또는 비보안 연결 URL(즉, http
)을 지정하면 라우터에서 포트 443으로 자동으로 트래픽을 보냅니다.
외부 클라이언트가 클러스터의 브로커에 걸쳐 연결을 로드 밸런싱하도록 하려면 다음을 수행합니다.
-
각 브로커 포드에 대해 OpenShift 경로에서
haproxy.router.openshift.io/balance
roundrobin 옵션을 구성하여 로드 밸런싱을 활성화합니다. 외부 클라이언트가 Core 프로토콜을 사용하는 경우 클라이언트의 연결 URL에서
useTopologyForLoadBalancing=false
키를 설정합니다.useTopologyForLoadBalancing=false
키를 설정하면 클라이언트가 브로커에서 제공하는 클러스터 토폴로지 정보에 있는 AMQ Broker Pod DNS 이름을 사용할 수 없습니다. Pod DNS 이름은 외부 클라이언트가 액세스할 수 없는 내부 IP 주소로 확인됩니다.
브로커에 서브스크립션 대기열 또는 요청/응답 대기열이 있는 경우 로드 밸런싱 클라이언트 연결 시 이러한 대기열을 사용하는 것과 관련된 경고에 유의하십시오. 자세한 내용은 4.12.4.4절. “ScanSetting 서브스크립션 대기열 또는 응답/요청 대기열이 있을 때 클라이언트 연결을 로드 밸런싱해야 합니다.”의 내용을 참조하십시오.
외부 클라이언트가 클러스터의 브로커 간에 연결을 로드 밸런싱하지 않도록 하려면 다음을 수행합니다.
- 각 클라이언트의 연결 URL에서 각 브로커 Pod에 대한 경로의 전체 호스트 이름을 지정합니다. 클라이언트는 연결 URL의 첫 번째 호스트 이름에 연결을 시도합니다. 그러나 첫 번째 호스트 이름을 사용할 수 없는 경우 클라이언트는 연결 URL의 다음 호스트 이름에 자동으로 연결됩니다.
-
외부 클라이언트가 Core 프로토콜을 사용하는 경우 클라이언트 연결 URL에서
useTopologyForLoadBalancing=false
키를 설정하여 클라이언트가 브로커에서 제공하는 클러스터 토폴로지 정보를 사용하지 않도록 합니다.
HTTP가 아닌 연결의 경우:
- 클라이언트는 연결 URL의 일부로 포트 번호(예: 포트 443)를 명시적으로 지정해야 합니다.
- 양방향 TLS의 경우 클라이언트는 연결 URL의 일부로 신뢰 저장소의 경로와 해당 암호를 지정해야 합니다.
- 양방향 TLS의 경우 클라이언트는 키 저장소의 경로와 해당 암호를 연결 URL의 일부로 지정해야 합니다.
지원되는 메시징 프로토콜에 대한 일부 클라이언트 연결 URL 예는 다음과 같습니다.
단방향 TLS 사용 외부 코어 클라이언트
tcp://my-broker-deployment-0-svc-rte-my-openshift-project.my-openshift-domain:443?useTopologyForLoadBalancing=false&sslEnabled=true \
&trustStorePath=~/client.ts&trustStorePassword=<password>
외부 Core 클라이언트는 브로커가 반환된 토폴로지 정보를 사용할 수 없기 때문에 연결 URL에서 useTopologyForLoadBalancing
키가 명시적으로 false
로 설정됩니다. 이 키가 true
로 설정되어 있거나 값을 지정하지 않으면 DEBUG 로그 메시지가 생성됩니다.
양방향 TLS 사용 외부 코어 클라이언트
tcp://my-broker-deployment-0-svc-rte-my-openshift-project.my-openshift-domain:443?useTopologyForLoadBalancing=false&sslEnabled=true \ &keyStorePath=~/client.ks&keyStorePassword=<password> \ &trustStorePath=~/client.ts&trustStorePassword=<password>
외부 OpenWire 클라이언트, 단방향 TLS 사용
ssl://my-broker-deployment-0-svc-rte-my-openshift-project.my-openshift-domain:443"
# Also, specify the following JVM flags
-Djavax.net.ssl.trustStore=~/client.ts -Djavax.net.ssl.trustStorePassword=<password>
양방향 TLS 사용 외부 OpenWire 클라이언트
ssl://my-broker-deployment-0-svc-rte-my-openshift-project.my-openshift-domain:443" # Also, specify the following JVM flags -Djavax.net.ssl.keyStore=~/client.ks -Djavax.net.ssl.keyStorePassword=<password> \ -Djavax.net.ssl.trustStore=~/client.ts -Djavax.net.ssl.trustStorePassword=<password>
단방향 TLS 사용 외부 AMQP 클라이언트
amqps://my-broker-deployment-0-svc-rte-my-openshift-project.my-openshift-domain:443?transport.verifyHost=true \
&transport.trustStoreLocation=~/client.ts&transport.trustStorePassword=<password>
양방향 TLS 사용 외부 AMQP 클라이언트
amqps://my-broker-deployment-0-svc-rte-my-openshift-project.my-openshift-domain:443?transport.verifyHost=true \ &transport.keyStoreLocation=~/client.ks&transport.keyStorePassword=<password> \ &transport.trustStoreLocation=~/client.ts&transport.trustStorePassword=<password>
4.12.4.3. NodePort를 사용하여 브로커에 연결
OpenShift 관리자는 경로를 사용하는 대신 OpenShift 외부 클라이언트에서 브로커 포드에 연결하도록 NodePort를 구성할 수 있습니다. NodePort는 브로커에 대해 구성된 수락자가 지정한 프로토콜별 포트 중 하나에 매핑해야 합니다.
기본적으로 NodePort는 30000~32767 범위에 있습니다. 즉, NodePort가 일반적으로 브로커 Pod의 의도된 포트와 일치하지 않습니다.
NodePort를 통해 OpenShift 외부의 클라이언트에서 브로커에 연결하려면 < protocol > :// <ocp_node_ip> : <node_ port_number
> 형식으로 URL을 지정합니다.
4.12.4.4. ScanSetting 서브스크립션 대기열 또는 응답/요청 대기열이 있을 때 클라이언트 연결을 로드 밸런싱해야 합니다.
Cryostat 서브스크립션
Cryostat 서브스크립션은 브로커의 큐로 표시되며, 지속성 구독자가 브로커에 처음 연결할 때 생성됩니다. 이 큐가 존재하며 클라이언트가 구독을 취소할 때까지 메시지를 수신합니다. 클라이언트가 다른 브로커에 다시 연결되면 해당 브로커에 또 다른 Cryostat 서브스크립션 큐가 생성됩니다. 이로 인해 다음 문제가 발생할 수 있습니다.
문제 |
완화 방법 |
원본 서브스크립션 큐에서 메시지가 중단될 수 있습니다. |
주소 또는 주소 집합에 대한
이 예에서 브로커는 메시지를 다른 브로커에 재배포하기 전에 대기열의 최종 소비자가 닫히는 후 5000 밀리초를 기다립니다. 메시지 재배포에 대한 자세한 내용은 메시지 재배포 활성화를 참조하십시오. |
다른 메시지가 계속 라우팅될 때 메시지 재배포 중 창이 있기 때문에 잘못된 순서로 메시지가 수신될 수 있습니다. |
없음. |
클라이언트가 구독을 취소하면 마지막으로 연결된 브로커에서만 큐가 삭제됩니다. 즉, 다른 큐가 계속 존재하고 메시지를 수신할 수 있습니다. |
구독 취소한 클라이언트에 대해 존재할 수 있는 다른 빈 큐를 삭제하려면 주소 또는 주소 집합에 대해 다음 속성을 모두 구성합니다.
자세한 내용은 주소 및 큐의 자동 생성 및 삭제 구성을 참조하십시오. |
요청/수정 대기열
JMS Producer에서 임시 응답 대기열을 생성하면 브로커에 큐가 생성됩니다. 작업 대기열에서 사용하는 클라이언트가 임시 큐에 응답하는 경우 다른 브로커에 연결하는 경우 다음과 같은 문제가 발생할 수 있습니다.
문제 | 완화 방법 |
---|---|
클라이언트가 연결된 브로커에 응답 큐가 존재하지 않으므로 클라이언트가 오류를 생성할 수 있습니다. |
클라이언트가 존재하지 않는 큐에 연결하도록 요청할 때 큐를 자동으로 생성하도록 브로커를 구성합니다. 자동 큐 생성을 구성하려면
|
작업 큐로 전송된 메시지는 배포되지 않을 수 있습니다. |
또한 주소 또는 주소 집합에 대한
자세한 내용은 메시지 재배포 활성화를 참조하십시오. |
추가 리소스
클러스터에서 실행 중인 서비스와 OpenShift 클러스터 외부에서 통신하기 위해 경로 및 NodePort와 같은 방법을 사용하는 방법에 대한 자세한 내용은 다음을 참조하십시오.
- OpenShift Container Platform 설명서의 수신 클러스터 트래픽 구성 개요.
4.13. 클러스터 연결 보안
클러스터의 브로커 간 내부 연결은 내부 커넥터와 어셉터를 사용하며, 둘 다 Artemis 로 이름이
지정됩니다. SSL을 활성화하여 TLS(Transport Layer Security) 프로토콜을 사용하여 클러스터의 브로커 간 연결을 보호할 수 있습니다.
SSL 지원 수락자는 클러스터의 모든 브로커에 대한 공통 TLS 인증서가 포함된 시크릿을 지정합니다. SSL 지원 커넥터에서는 TLS 인증서의 공개 키가 포함된 신뢰 저장소를 지정합니다. 각 브로커의 신뢰 저장소에 공개 키가 필요하므로 브로커는 TLS 연결을 설정할 때 클러스터의 다른 브로커를 신뢰할 수 있습니다.
다음 예제 절차에서는 자체 서명된 인증서를 사용하여 클러스터의 브로커 간에 내부 연결을 보호하는 방법을 설명합니다.
프로세스
자체 서명된 TLS 인증서를 생성하여 키 저장소 파일에 추가합니다.
인증서의
주체 대체 이름
(SAN) 필드에서 다음 예와 같이 클러스터의 모든 브로커와 일치하는 와일드카드 DNS 이름을 지정합니다. 이 예제는테스트
네임스페이스에 배포된ex-aao
라는 CR을 사용하는 것을 기반으로 합니다.$ keytool -storetype jks -keystore server-keystore.jks -storepass artemis -keypass artemis -alias server -genkey -keyalg "RSA" -keysize 2048 -dname "CN=AMQ Server, OU=Artemis, O=ActiveMQ, L=AMQ, S=AMQ, C=AMQ" -validity 365 -ext bc=ca:false -ext eku=sA -ext san=dns:*.ex-aao-hdls-svc.test.svc.cluster.local
인증서가 와일드카드 DNS 이름 사용을 지원하지 않는 경우 클러스터의 모든 브로커 Pod에 대한 인증서의
SAN
필드에 쉼표로 구분된 DNS 이름 목록을 포함할 수 있습니다. 예를 들면 다음과 같습니다.keytool -storetype jks -keystore server-keystore.jks -storepass artemis -keypass artemis -alias server -genkey -keyalg "RSA" -keysize 2048 -dname "CN=AMQ Server, OU=Artemis, O=ActiveMQ, L=AMQ, S=AMQ, C=AMQ" -validity 365 -ext bc=ca:false -ext eku=sA -ext san=dns:ex-aao-ss-0.ex-aao-hdls-svc.test.svc.cluster.local,dns:ex-aao-ss-1.ex-aao-hdls-svc.test.svc.cluster.local
-
TLS 인증서가 DNS 이름 사용을 지원하지 않는 경우 아래 설명된 대로
ActiveMQArtemis
CR에서 호스트 확인을 비활성화해야 합니다.
신뢰 저장소 파일로 가져올 수 있도록 키 저장소 파일에서 TLS 인증서의 공개 키를 내보냅니다. 예를 들면 다음과 같습니다.
$ keytool -storetype jks -keystore server-keystore.jks -storepass artemis -alias server -exportcert -rfc > server.crt
클러스터의 다른 브로커가 인증서를 신뢰할 수 있도록 TLS 인증서의 공개 키를 신뢰 저장소 파일로 가져옵니다. 예를 들면 다음과 같습니다.
$ keytool -storetype jks -keystore server-truststore.jks -storepass artemis -keypass artemis -importcert -alias server -file server.crt -noprompt
키 저장소 및 신뢰 저장소 파일 및 관련 암호를 저장할 시크릿을 생성합니다. 예를 들면 다음과 같습니다.
oc create secret generic artemis-ssl-secret --namespace test --from-file=broker.ks=server-keystore.jks --from-file=client.ts=server-truststore.jks --from-literal=keyStorePassword=artemis --from-literal=trustStorePassword=artemis
브로커 배포에 대해
ActiveMQArtemis
CR을 편집하고 Artemis라는 내부 어셉터를
추가합니다. Artemisacceptor
에서sslEnabled
속성을true
로 설정하고sslSecret
특성에서 생성한 시크릿 이름을 지정합니다. 예를 들면 다음과 같습니다.spec: .. deploymentPlan: size: 2 acceptors: - name: artemis port: 61616 sslEnabled: true sslSecret: artemis-ssl-secret ..
클러스터의 각 브로커가 클러스터
의
다른 브로커에 연결하는 데 사용하는 Artemis 커넥터에 대해 SSL을 활성화합니다.brokerProperties
속성을 사용하여 SSL을 활성화하고 TLS 인증서의 공개 키가 포함된 truststore 파일의 경로와 자격 증명을 지정합니다.spec: .. deploymentPlan: size: 2 acceptors: - name: artemis port: 61616 sslEnabled: true sslSecret: artemis-ssl-secret brokerProperties: - 'connectorConfigurations.artemis.params.sslEnabled=true' - 'connectorConfigurations.artemis.params.trustStorePath=/etc/artemis-ssl-secret-volume/client.ts' - 'connectorConfigurations.artemis.params.trustStorePassword=artemis' ..
- connectorConfigurations.artemis.params.trustStorePath
-
이 값은 브로커 Pod의 truststore 파일
client.ts
와 일치해야 합니다. 시크릿의 truststore 파일 및 관련 암호 파일은 각 브로커 Pod의/etc/<시크릿 이름>-volume
디렉터리에 마운트됩니다. 이전 예제에서는artemis-ssl-secret
이라는 시크릿에 있는 신뢰 저장소의 위치를 지정합니다.
TLS 인증서에서 DNS 이름 사용을 지원하지 않는 경우
brokerProperties
속성을 사용하여 호스트 확인을 비활성화합니다. 예를 들면 다음과 같습니다.spec: .. brokerProperties: .. - 'connectorConfigurations.artemis.params.verifyHost=false' ..
- CR을 저장합니다.
4.14. AMQP 메시지에 대한 대용량 메시지 처리 구성
클라이언트는 브로커의 내부 버퍼 크기를 초과할 수 있는 대규모 AMQP 메시지를 보내 예기치 않은 오류가 발생할 수 있습니다. 이 상황을 방지하려면 메시지가 지정된 최소값보다 큰 경우 메시지를 파일로 저장하도록 브로커를 구성할 수 있습니다. 이러한 방식으로 대용량 메시지를 처리한다는 것은 브로커가 메시지를 메모리에 보유하지 않음을 의미합니다. 대신 브로커는 대규모 메시지 파일을 저장하는 데 사용되는 전용 디렉터리에 메시지를 저장합니다.
OpenShift Container Platform에 브로커 배포의 경우 대용량 메시지 디렉터리는 메시지 스토리지에 브로커에서 사용하는 영구 볼륨(PV)의 /opt/ <custom_resource_name> /data/large-messages
입니다. 브로커가 메시지를 큰 메시지로 저장하면 큐는 대규모 메시지 디렉터리에 있는 파일에 대한 참조를 유지합니다.
AMQP 프로토콜에 대한 브로커 구성에서만 대규모 메시지 크기 제한을 구성할 수 있습니다. AMQ Core 및 Openwire 프로토콜의 경우 클라이언트 연결 구성에서 큰 메시지 크기 제한을 구성할 수 있습니다. 자세한 내용은 Red Hat AMQ Clients 설명서를 참조하십시오.
4.14.1. 대용량 메시지 처리를 위한 AMQP 어셉터 구성
다음 절차에서는 지정된 크기보다 큰 AMQP 메시지를 큰 메시지로 처리하도록 어셉터를 구성하는 방법을 보여줍니다.
사전 요구 사항
- Operator 기반 브로커 배포에 대해 어셉터를 구성하는 방법에 대해 잘 알고 있어야 합니다. 4.12.1절. “어셉터 구성”을 참조하십시오.
대규모 AMQP 메시지를 전용 대규모 메시지 디렉터리에 저장하려면 브로커 배포에서 영구 스토리지를 사용해야 합니다(즉, 배포를 생성하는 데 사용되는 CR(사용자 정의 리소스) 인스턴스에서
persistenceEnabled
가true
로 설정됨). 영구 스토리지 구성에 대한 자세한 내용은 다음을 참조하십시오.
프로세스
이전에 AMQP 수락자를 정의한 CR(사용자 정의 리소스) 인스턴스를 엽니다.
OpenShift 명령줄 인터페이스 사용:
$ oc edit -f <path/to/custom_resource_instance>.yaml
OpenShift Container Platform 웹 콘솔 사용:
- 왼쪽 탐색 메뉴에서 → 를 클릭합니다.
-
ActiveMQArtemis
CRD를 클릭합니다. -
Instances
탭을 클릭합니다. - 프로젝트 네임스페이스에 해당하는 CR 인스턴스를 찾습니다.
이전에 구성된 AMQP 수락자는 다음과 유사할 수 있습니다.
spec: ... acceptors: - name: my-acceptor protocols: amqp port: 5672 connectionsAllowed: 5 expose: true sslEnabled: true ...
브로커가 큰 메시지로 처리하는 AMQP 메시지의 최소 크기(바이트)를 지정합니다. 예를 들면 다음과 같습니다.
spec: ... acceptors: - name: my-acceptor protocols: amqp port: 5672 connectionsAllowed: 5 expose: true sslEnabled: true amqpMinLargeMessageSize: 204800 ... ...
이전 예에서 브로커는 포트 5672에서 AMQP 메시지를 수락하도록 구성되어 있습니다.
amqpMinLargeMessageSize
값을 기반으로 수락자가 204800바이트보다 크거나 같은 본문이 있는 AMQP 메시지를 수신하는 경우 브로커는 메시지를 큰 메시지로 저장합니다.브로커는 메시지를 메시지 스토리지에 사용하는 PV(영구 볼륨)의 대용량 메시지 디렉터리(
/opt/ <custom_resource_name> /data/large-messages
)에 저장합니다.amqpMinLargeMessageSize
속성의 값을 명시적으로 지정하지 않으면 브로커는 기본값 102400(즉, 100KB)을 사용합니다.amqpMinLargeMessageSize
를 값-1
로 설정하면 AMQP 메시지의 대규모 메시지 처리가 비활성화됩니다.
4.15. 브로커 상태 점검 구성
시작, 활성 상태 프로브 및 준비 상태 프로브를 사용하여 AMQ Broker에서 상태 점검을 구성할 수 있습니다.
- 시작 프로브는 컨테이너 내의 애플리케이션이 시작되었는지 여부를 나타냅니다.
- 활성 상태 프로브는 컨테이너가 여전히 실행 중인지 확인합니다.
- 준비 상태 프로브는 컨테이너가 서비스 요청을 수락할 준비가 되었는지 확인
Pod의 시작 프로브 또는 활성 상태 프로브 검사가 실패하면 프로브에서 Pod를 다시 시작합니다.
AMQ Broker에는 기본 준비 상태 및 활성 프로브가 포함됩니다. 기본 활성 프로브는 브로커의 HTTP 포트를 ping하여 브로커가 실행 중인지 확인합니다. 기본 준비 상태 프로브는 브로커에 대해 구성된 각 어셉터 포트에 대한 연결을 열어 브로커가 네트워크 트래픽을 허용할 수 있는지 확인합니다.
기본 활성 및 준비 상태 프로브를 사용하는 제한 사항은 브로커의 파일 시스템과 같은 기본 문제를 식별할 수 없다는 것입니다. 브로커의 명령줄 유틸리티인 Artemis를 사용하여 보다 포괄적인 상태 점검을 실행하는 사용자 정의 활성 상태 프로브 및 준비 상태 프로브를 생성할 수 있습니다.
AMQ Broker에는 기본 시작 프로브가 포함되어 있지 않습니다. ActiveMQArtemis
사용자 정의 리소스(CR)에서 시작 프로브를 구성할 수 있습니다.
4.15.1. 시작 프로브 구성
브로커 컨테이너 내의 AMQ Broker 애플리케이션이 시작되었는지 확인하도록 시작 프로브를 구성할 수 있습니다.
프로세스
브로커 배포의 CR 인스턴스를 편집합니다.
OpenShift 명령줄 인터페이스 사용:
- 브로커 배포를 위해 프로젝트에 CR을 배포할 수 있는 권한이 있는 사용자로 OpenShift Container Platform에 로그인합니다.
배포에 사용할 CR을 편집합니다.
oc edit ActiveMQArtemis <CR instance name> -n <namespace>
OpenShift Container Platform 웹 콘솔 사용:
- 브로커 배포를 위해 프로젝트에 CR을 배포할 수 있는 권한이 있는 사용자로 OpenShift Container Platform에 로그인합니다.
- 왼쪽 창에서 → 를 클릭합니다.
- ActiveMQArtemis CRD를 클릭합니다.
- Instances 탭을 클릭합니다.
- 브로커 배포에 사용할 인스턴스를 클릭합니다.
YAML 탭을 클릭합니다.
콘솔에서 YAML 편집기가 열리고 CR 인스턴스를 편집할 수 있습니다.
CR의
deploymentPlan
섹션에서startupProbe
섹션을 추가합니다. 예를 들면 다음과 같습니다.spec: deploymentPlan: startupProbe: exec: command: - /bin/bash - '-c' - /opt/amq/bin/artemis - 'check' - 'node' - '--up' - '--url' - 'tcp://$HOSTNAME:61616' initialDelaySeconds: 5 periodSeconds: 10 timeoutSeconds: 3 failureThreshold: 30
command
-
컨테이너 내에서 실행할 startup probe 명령입니다. 이 예에서 시작 프로브는 Artemis
check node
명령을 사용하여 브로커 Pod의 컨테이너에서 AMQ Broker가 시작되었는지 확인합니다. initialDelaySeconds
-
컨테이너가 시작된 후 프로브가 실행되기 전에 지연(초)입니다. 기본값은
0
입니다. periodSeconds
-
프로브가 실행되는 간격(초)입니다. 기본값은
10
입니다. timeoutSeconds
-
시작 프로브 명령이 브로커의 응답을 기다리는 시간(초)입니다. 명령에 대한 응답이 수신되지 않으면 명령이 종료됩니다. 기본값은
1
입니다. failureThreshold
프로브가 실패한 것으로 간주되는 시작 프로브의 시간 초과를 포함한 최소 연속 실패입니다. 프로브가 실패한 것으로 간주되면 Pod를 다시 시작합니다. 기본값은
3
입니다.클러스터의 리소스 및 브로커 저널 크기에 따라 브로커가 프로브 검사를 시작하고 전달할 수 있도록 실패 임계값을 늘려야 할 수 있습니다. 그렇지 않으면 브로커가 실패 임계값에 반복적으로 도달하고 시작 프로브에 의해 매번 브로커가 다시 시작되는 루프 조건을 입력합니다. 예를 들어
failureThreshold
를30
으로 설정하고 프로브가 기본 간격인 10초에서 실행되는 경우 브로커는 300초로 시작하여 프로브 확인을 전달합니다.
- CR을 저장합니다.
추가 리소스
OpenShift Container Platform의 활성 상태 프로브 및 준비 상태 프로브에 대한 자세한 내용은 OpenShift Container Platform 설명서의 상태 점검을 사용하여 애플리케이션 상태 모니터링 을 참조하십시오.
4.15.2. 활성 상태 프로브 및 준비 상태 프로브 구성
다음 예제에서는 활성 상태 프로브 및 준비 상태 프로브를 사용하여 상태 점검을 실행하도록 브로커 배포에 대한 기본 CR(사용자 정의 리소스) 인스턴스를 구성하는 방법을 보여줍니다.
사전 요구 사항
- CR 인스턴스를 사용하여 기본 브로커 배포를 생성하는 방법을 숙지해야 합니다. 3.4.1절. “기본 브로커 인스턴스 배포”을 참조하십시오.
프로세스
브로커 배포의 CR 인스턴스를 편집합니다.
OpenShift 명령줄 인터페이스 사용:
- 브로커 배포를 위해 프로젝트에 CR을 배포할 수 있는 권한이 있는 사용자로 OpenShift Container Platform에 로그인합니다.
배포에 사용할 CR을 편집합니다.
oc edit ActiveMQArtemis <CR instance name> -n <namespace>
OpenShift Container Platform 웹 콘솔 사용:
- 브로커 배포를 위해 프로젝트에 CR을 배포할 수 있는 권한이 있는 사용자로 OpenShift Container Platform에 로그인합니다.
- 왼쪽 창에서 → 를 클릭합니다.
- ActiveMQArtemis CRD를 클릭합니다.
- Instances 탭을 클릭합니다.
- 브로커 배포에 사용할 인스턴스를 클릭합니다.
- YAML 탭을 클릭합니다.
활성 프로브를 구성하려면 CR의
deploymentPlan
섹션에livenessProbe
섹션을 추가합니다. 예를 들면 다음과 같습니다.spec: deploymentPlan: livenessProbe: initialDelaySeconds: 5 periodSeconds: 5 failureThreshold: 30
initialDelaySeconds
컨테이너가 시작된 후 프로브가 실행되기 전에 지연(초)입니다. 기본값은
5
입니다.참고배포에 시작 프로브도 구성된 경우 활성 상태 프로브와 준비 상태 프로브 모두에 대해 지연을 0으로 설정할 수 있습니다. 이러한 두 프로브는 시작 프로브가 전달된 후에만 실행됩니다. 시작 프로브가 이미 통과된 경우 브로커가 성공적으로 시작되었으므로 활성 상태 프로브 및 준비 상태 프로브 실행 지연이 필요하지 않습니다.
periodSeconds
-
프로브가 실행되는 간격(초)입니다. 기본값은
5
입니다. failureThreshold
프로브를 나타내는 활성 프로브의 시간 초과를 포함한 최소 연속 실패가 실패했습니다. 프로브가 실패하면 Pod를 다시 시작합니다. 기본값은 3입니다.
배포에 활성 프로브가 실행되기 전에 브로커 애플리케이션이 시작되었는지 확인하는 시작 프로브가 구성되지 않은 경우 브로커가 활성 상태 프로브 검사를 시작하고 전달할 수 있도록 실패 임계값을 늘려야 할 수 있습니다. 그렇지 않으면 브로커는 실패 임계값에 반복적으로 도달하고 활성 상태 프로브에 의해 매번 브로커 Pod를 다시 시작하는 루프 조건을 입력할 수 있습니다.
브로커가 활성 상태 프로브 검사를 시작하고 전달하는 데 필요한 시간은 클러스터의 리소스 및 브로커 저널 크기에 따라 다릅니다. 예를 들어
failureThreshold
를 30으로 설정하고 프로브가 기본 5초 간격으로 실행되는 경우 브로커는 150초 동안 활성 상태 프로브 검사를 시작하고 전달합니다.참고활성 상태 프로브를 구성하지 않거나 구성된 프로브에서 처리기가 없는 경우 AMQ Broker Operator는 다음 구성이 있는 기본 TCP 프로브를 생성합니다. 기본 TCP 프로브는 지정된 포트의 브로커 컨테이너에 대한 소켓을 열려고 시도합니다.
spec: deploymentPlan: livenessProbe: tcpSocket: port: 8181 initialDelaySeconds: 30 timeoutSeconds: 5
준비 상태 프로브를 구성하려면 CR의
deploymentPlan
섹션에서readinessProbe
섹션을 추가합니다. 예를 들면 다음과 같습니다.spec: deploymentPlan: readinessProbe: initialDelaySeconds: 5 periodSeconds: 5
준비 상태 프로브를 구성하지 않으면 기본 제공 스크립트에서 모든 허용자가 연결을 허용할 수 있는지 확인합니다.
보다 포괄적인 상태 점검을 구성하려면 Artemis
check
명령줄 유틸리티를 활성 상태 또는 준비 상태 프로브 구성에 추가합니다.브로커에 대한 전체 클라이언트 연결을 생성하는 상태 점검을 구성하려면
livenessProbe
또는readinessProbe
섹션에서exec
섹션을 추가합니다.exec
섹션에서command
섹션을 추가합니다.명령
섹션에서artemis 검사 노드
명령 구문을 추가합니다. 예를 들면 다음과 같습니다.spec: deploymentPlan: readinessProbe: exec: command: - bash - '-c' - /home/jboss/amq-broker/bin/artemis - check - node - '--silent' - '--acceptor' - <acceptor name> - '--user' - $AMQ_USER - '--password' - $AMQ_PASSWORD initialDelaySeconds: 30 timeoutSeconds: 5
기본적으로 Artemis
검사 노드
명령은 Artemis라는 어셉터의 URI를 사용합니다.브로커에 Artemis라는 어셉
터가
있는 경우 명령에서--acceptor <acceptor name
> 옵션을 제외할 수 있습니다.참고$AMQ_USER
및$AMQ_PASSWORD
는 AMQ Operator에 의해 구성된 환경 변수입니다.메시지를 생성하고 사용하는 상태 점검을 구성하려면
활성Probe 또는
섹션에서 브로커 파일 시스템의 상태를 검증readinessProbe
합니다
.exec
섹션에서command
섹션을 추가합니다.명령
섹션에서 Artemischeck queue
명령 구문을 추가합니다. 예를 들면 다음과 같습니다.spec: deploymentPlan: readinessProbe: exec: command: - bash - '-c' - /home/jboss/amq-broker/bin/artemis - check - queue - '--name' - livenessqueue - '--produce' - "1" - '--consume' - "1" - '--silent' - '--user' - $AMQ_USER - '--password' - $AMQ_PASSWORD initialDelaySeconds: 30 timeoutSeconds: 5
참고지정한 큐 이름은 브로커에 구성되어야 하며
anycast
의routingType
이 있어야 합니다. 예를 들면 다음과 같습니다.apiVersion: broker.amq.io/v1beta1 kind: ActiveMQArtemisAddress metadata: name: livenessqueue namespace: activemq-artemis-operator spec: addressName: livenessqueue queueConfiguration: purgeOnNoConsumers: false maxConsumers: -1 durable: true enabled: true queueName: livenessqueue routingType: anycast
- CR을 저장합니다.
추가 리소스
OpenShift Container Platform의 활성 상태 프로브 및 준비 상태 프로브에 대한 자세한 내용은 OpenShift Container Platform 설명서의 상태 점검을 사용하여 애플리케이션 상태 모니터링 을 참조하십시오.
4.16. 클러스터 스케일 다운을 지원하는 메시지 마이그레이션 활성화
클러스터의 브로커 수를 축소하고 메시지를 클러스터의 나머지 Pod로 마이그레이션하려면 메시지 마이그레이션을 활성화해야 합니다.
메시지 마이그레이션이 활성화된 클러스터를 축소하면 스케일다운 컨트롤러에서 메시지 마이그레이션 프로세스를 관리합니다.
4.16.1. 메시지 마이그레이션 프로세스의 단계
메시지 마이그레이션 프로세스는 다음 단계를 따릅니다.
- 배포의 의도적인 스케일 다운으로 인해 배포의 브로커 Pod가 종료되면 Operator는 메시지 마이그레이션을 준비하기 위해 스케일 다운 사용자 정의 리소스를 자동으로 배포합니다.
고립된 PV(영구 볼륨)를 확인하려면 scaledown 컨트롤러에서 볼륨 클레임의 서신을 확인합니다. 컨트롤러는 볼륨 클레임의 ordinal을 프로젝트의 StatefulSet(즉, 브로커 클러스터)에서 여전히 실행 중인 브로커 Pod의 것과 비교합니다.
볼륨 클레임의 ordinal이 브로커 클러스터에서 계속 실행 중인 브로커 Pod의 서수보다 높으면 scaledown 컨트롤러에서 해당 ordinal의 브로커 Pod가 종료되었으며 메시징 데이터를 다른 브로커 Pod로 마이그레이션해야 합니다.
- scaledown 컨트롤러는 drainer Pod를 시작합니다. drainer Pod는 클러스터의 다른 라이브 브로커 Pod 중 하나에 연결하고 해당 라이브 브로커 Pod로 메시지를 마이그레이션합니다.
다음 그림은 scaledown 컨트롤러 ( drain controller라고도 함)에서 실행 중인 브로커 Pod로 메시지를 마이그레이션하는 방법을 보여줍니다.
그림 4.1. scaledown 컨트롤러를 사용한 메시지 마이그레이션

메시지가 작동 브로커 Pod로 성공적으로 마이그레이션되면 드레인터 Pod가 종료되고 축소 컨트롤러에서 고립된 PV의 PVC를 제거합니다. PV는 "Released" 상태로 반환됩니다.
PV의 회수 정책이 유지
되도록 설정된 경우 PV를 삭제하고 다시 생성할 때까지 다른 Pod에서 PV를 사용할 수 없습니다. 예를 들어, 축소 후 클러스터를 확장하면 PV를 삭제하고 다시 생성할 때까지 Pod에서 PV를 사용할 수 없습니다.
추가 리소스
- 브로커 배포를 축소할 때 메시지 마이그레이션의 예는 4.16.2절. “메시지 마이그레이션 활성화” 를 참조하십시오.
4.16.2. 메시지 마이그레이션 활성화
ActiveMQArtemis
사용자 정의 리소스(CR)에서 메시지 마이그레이션을 활성화할 수 있습니다.
사전 요구 사항
- 이미 기본 브로커 배포가 있습니다. 3.4.1절. “기본 브로커 인스턴스 배포”을 참조하십시오.
- 메시지 마이그레이션이 작동하는 방식을 이해합니다. 자세한 내용은 4.16.1절. “메시지 마이그레이션 프로세스의 단계”의 내용을 참조하십시오.
- 스케일다운 컨트롤러는 단일 OpenShift 프로젝트 내에서만 작동합니다. 컨트롤러는 별도의 프로젝트의 브로커 간에 메시지를 마이그레이션할 수 없습니다.
- 브로커 배포를 0(zero)으로 축소하면 메시징 데이터를 마이그레이션할 수 있는 실행 중인 브로커 Pod가 없으므로 메시지 마이그레이션이 수행되지 않습니다. 그러나 배포를 0으로 축소한 다음 원래 배포보다 작은 크기로 백업하면 종료되는 브로커에 대해 드레인터 Pod가 시작됩니다.
프로세스
브로커 배포의 CR 인스턴스를 편집합니다.
OpenShift 명령줄 인터페이스 사용:
- 브로커 배포를 위해 프로젝트에 CR을 배포할 수 있는 권한이 있는 사용자로 OpenShift Container Platform에 로그인합니다.
배포에 사용할 CR을 편집합니다.
oc edit ActiveMQArtemis <CR instance name> -n <namespace>
OpenShift Container Platform 웹 콘솔 사용:
- 브로커 배포를 위해 프로젝트에 CR을 배포할 수 있는 권한이 있는 사용자로 OpenShift Container Platform에 로그인합니다.
- 왼쪽 창에서 → 를 클릭합니다.
- ActiveMQArtemis CRD를 클릭합니다.
- Instances 탭을 클릭합니다.
- 브로커 배포에 사용할 인스턴스를 클릭합니다.
YAML 탭을 클릭합니다.
콘솔에서 YAML 편집기가 열리고 CR 인스턴스를 편집할 수 있습니다.
CR의
deploymentPlan
섹션에서messageMigration
속성을 추가하고true
로 설정합니다. 아직 구성되지 않은 경우persistenceEnabled
특성을 추가하고true
로 설정합니다. 예를 들면 다음과 같습니다.spec: deploymentPlan: messageMigration: true persistenceEnabled: true ...
이러한 설정은 나중에 클러스터형 브로커 배포 크기를 축소할 때 Operator는 확장 컨트롤러를 자동으로 시작하고 여전히 실행 중인 브로커 Pod로 메시지를 마이그레이션합니다.
- CR을 저장합니다.
(선택 사항) 클러스터를 축소하고 메시지 마이그레이션 프로세스를 보려면 다음 단계를 완료합니다.
기존 브로커 배포에서 실행 중인 포드를 확인합니다.
$ oc get pods
다음과 같은 출력이 표시됩니다.
activemq-artemis-operator-8566d9bf58-9g25l 1/1 Running 0 3m38s ex-aao-ss-0 1/1 Running 0 112s ex-aao-ss-1 1/1 Running 0 8s
이전 출력에서는 3개의 Pod가 실행 중임을 보여줍니다. 하나는 브로커 Operator 자체 및 배포의 각 브로커에 대해 별도의 Pod입니다.
각 Pod에 로그인하고 각 브로커에 일부 메시지를 보냅니다.
Pod
ex-aao-ss-0
에 클러스터 IP 주소가172.17.0.6
이므로 다음 명령을 실행합니다.$ /opt/amq/bin/artemis producer --url tcp://172.17.0.6:61616 --user admin --password admin
Pod
ex-aao-ss-1
에 클러스터 IP 주소가172.17.0.7
인 경우 다음 명령을 실행합니다.$ /opt/amq/bin/artemis producer --url tcp://172.17.0.7:61616 --user admin --password admin
위의 명령은 각 브로커에서 queue이라는
큐
를 생성하고 각 큐에 1000개의 메시지를 추가합니다.클러스터를 두 브로커에서 1개로 축소합니다.
-
기본 브로커 CR,
broker_activemqartemis_cr.yaml
을 엽니다. -
CR에서
deploymentPlan.size
를1
로 설정합니다. 명령줄에서 변경 사항을 적용합니다.
$ oc apply -f deploy/crs/broker_activemqartemis_cr.yaml
Pod
ex-aao-sss-1
이 종료되기 시작합니다. scaledown 컨트롤러는 동일한 이름의 새 드레이닝 Pod를 시작합니다. 이 드레인러 Pod는 브로커 Podex-aao-sss-1에서 클러스터의 다른 브로커 Pod인
으로 모든 메시지를 마이그레이션한 후 종료됩니다.ex-
aao-ss-0
-
기본 브로커 CR,
-
drainer Pod가 종료되면 브로커 Pod의
ex-aao-sss-0
의 메시지 수를 확인합니다.드레인러 Pod가 종료된 브로커 Pod에서 1000개의 메시지를 성공적으로 마이그레이션했음을 나타내는 큐의 메시지 수가 2000개입니다.
4.17. OpenShift Container Platform 노드에서 브로커 Pod 배치 제어
노드 선택기, 허용 오차 또는 유사성 및 유사성 방지 규칙을 사용하여 OpenShift Container Platform 노드에 AMQ Broker Pod 배치를 제어할 수 있습니다.
- 노드 선택기
- 노드 선택기를 사용하면 특정 노드에 브로커 Pod를 예약할 수 있습니다.
- 허용 오차
- 허용 오차를 사용하면 톨러레이션이 노드에 구성된 테인트와 일치하는 경우 노드에 브로커 Pod를 예약할 수 있습니다. 일치하는 Pod 허용 오차가 없으면 테인트를 사용하면 노드에서 Pod 수락을 거부할 수 있습니다.
- affinity/Anti-affinity
- 노드 유사성 규칙은 노드의 라벨에 따라 Pod를 예약할 수 있는 노드를 제어합니다. Pod 유사성 및 유사성 방지 규칙은 해당 노드에서 이미 실행 중인 Pod에 따라 Pod를 예약할 수 있는 노드를 제어합니다.
4.17.1. 노드 선택기를 사용하여 특정 노드에 Pod 배치
노드 선택기는 노드 레이블에 키-값 쌍이 일치하는 노드에 브로커 Pod를 예약해야 하는 키-값 쌍을 지정합니다.
다음 예제에서는 특정 노드에서 브로커 Pod를 예약하도록 노드 선택기를 구성하는 방법을 보여줍니다.
사전 요구 사항
- CR 인스턴스를 사용하여 기본 브로커 배포를 생성하는 방법을 숙지해야 합니다. 3.4.1절. “기본 브로커 인스턴스 배포”을 참조하십시오.
- 브로커 Pod를 예약할 OpenShift Container Platform 노드에 레이블을 추가합니다. 노드 레이블을 추가하는 방법에 대한 자세한 내용은 노드 선택기를 사용하여 OpenShift Container Platform 설명서의 Pod 배치 제어를 참조하십시오.
프로세스
기본 브로커 CRD를 기반으로 CR(사용자 정의 리소스) 인스턴스를 생성합니다.
OpenShift 명령줄 인터페이스 사용:
브로커 배포를 위해 프로젝트에 CR을 배포할 수 있는 권한이 있는 사용자로 OpenShift에 로그인합니다.
oc login -u <user> -p <password> --server=<host:port>
-
다운로드 및 추출한 Operator 설치 아카이브의
deploy/crs
디렉터리에 포함된broker_activemqartemis_cr.yaml
이라는 샘플 CR 파일을 엽니다.
OpenShift Container Platform 웹 콘솔 사용:
- 브로커 배포를 위해 프로젝트에 CR을 배포할 권한이 있는 사용자로 콘솔에 로그인합니다.
- 기본 브로커 CRD를 기반으로 새 CR 인스턴스를 시작합니다. 왼쪽 창에서 → 를 클릭합니다.
- ActiveMQArtemis CRD를 클릭합니다.
- Instances 탭을 클릭합니다.
Create ActiveMQArtemis 를 클릭합니다.
콘솔에서 YAML 편집기가 열리고 CR 인스턴스를 구성할 수 있습니다.
CR의
deploymentPlan
섹션에서nodeSelector
섹션을 추가하고 Pod의 노드를 선택하기 위해 일치시킬 노드 레이블을 추가합니다. 예를 들면 다음과 같습니다.spec: deploymentPlan: nodeSelector: app: broker1
이 예에서 브로커 Pod는
app: broker1
레이블이 있는 노드에 예약됩니다.CR 인스턴스를 배포합니다.
OpenShift 명령줄 인터페이스 사용:
- CR 파일을 저장합니다.
브로커 배포를 생성하는 프로젝트로 전환합니다.
$ oc project <project_name>
CR 인스턴스를 생성합니다.
$ oc create -f <path/to/custom_resource_instance>.yaml
OpenShift 웹 콘솔 사용:
- CR 구성을 완료하면 생성 을 클릭합니다.
추가 리소스
OpenShift Container Platform의 노드 선택기에 대한 자세한 내용은 OpenShift Container Platform 설명서의 노드 선택기를 사용하여 특정 노드에 Pod 배치를 참조하십시오.
4.17.2. 허용 오차를 사용하여 Pod 배치 제어
테인트 및 허용 오차는 특정 노드에서 Pod를 예약할 수 있는지 여부를 제어합니다. 테인트를 사용하면 Pod에 일치하는 톨러레이션이 없으면 노드에서 Pod 일정을 거부할 수 있습니다. 테인트를 사용하여 일치하는 톨러레이션이 있는 브로커 Pod와 같은 특정 Pod용으로 노드가 예약되도록 노드에서 Pod를 제외할 수 있습니다.
일치하는 허용 오차가 있으면 브로커 Pod를 노드에 예약할 수 있지만 해당 노드에서 Pod가 예약되는 것을 보장하지는 않습니다. 테인트가 구성된 노드에 브로커 Pod가 예약되도록 하려면 선호도 규칙을 구성할 수 있습니다. 자세한 내용은 다음을 참조하십시오. 4.17.3절. “유사성 및 유사성 방지 규칙을 사용하여 Pod 배치 제어”
다음 예제에서는 노드에 구성된 테인트와 일치하도록 허용 오차를 구성하는 방법을 보여줍니다.
사전 요구 사항
- CR 인스턴스를 사용하여 기본 브로커 배포를 생성하는 방법을 숙지해야 합니다. 3.4.1절. “기본 브로커 인스턴스 배포”을 참조하십시오.
브로커 Pod 예약을 위해 예약할 노드에 테인트를 적용합니다. 테인트는 키, 값 및 효과로 구성됩니다. 테인트 효과에 따라 다음이 결정됩니다.
- 노드의 기존 Pod가 제거됨
- 기존 Pod는 노드에 남아 있을 수 있지만 일치하는 톨러레이션이 없으면 새 Pod를 예약할 수 없습니다.
- 필요한 경우 새 Pod를 노드에 예약할 수 있지만 기본 설정은 노드에서 새 Pod를 예약하지 않는 것입니다.
테인트 적용에 대한 자세한 내용은 OpenShift Container Platform 설명서에서 노드 테인트를 사용하여 Pod 배치 제어를 참조하십시오.
프로세스
기본 브로커 CRD를 기반으로 CR(사용자 정의 리소스) 인스턴스를 생성합니다.
OpenShift 명령줄 인터페이스 사용:
브로커 배포를 위해 프로젝트에 CR을 배포할 수 있는 권한이 있는 사용자로 OpenShift에 로그인합니다.
oc login -u <user> -p <password> --server=<host:port>
-
다운로드 및 추출한 Operator 설치 아카이브의
deploy/crs
디렉터리에 포함된broker_activemqartemis_cr.yaml
이라는 샘플 CR 파일을 엽니다.
OpenShift Container Platform 웹 콘솔 사용:
- 브로커 배포를 위해 프로젝트에 CR을 배포할 권한이 있는 사용자로 콘솔에 로그인합니다.
- 기본 브로커 CRD를 기반으로 새 CR 인스턴스를 시작합니다. 왼쪽 창에서 → 를 클릭합니다.
- ActiveMQArtemis CRD를 클릭합니다.
- Instances 탭을 클릭합니다.
Create ActiveMQArtemis 를 클릭합니다.
콘솔에서 YAML 편집기가 열리고 CR 인스턴스를 구성할 수 있습니다.
CR의
deploymentPlan
섹션에서tolerations
섹션을 추가합니다.허용 오차
섹션에서 일치하려는 노드 테인트에 대한 허용 오차를 추가합니다. 예를 들면 다음과 같습니다.spec: deploymentPlan: tolerations: - key: "app" value: "amq-broker" effect: "NoSchedule"
이 예에서 허용 오차는
app=amq-broker:NoSchedule
의 노드 테인트와 일치하므로 이 테인트가 구성된 노드에서 Pod를 예약할 수 있습니다.
브로커 Pod가 올바르게 예약되도록 하려면 CR의 tolerations
섹션에 tolerationsSeconds
속성을 지정하지 마십시오.
CR 인스턴스를 배포합니다.
OpenShift 명령줄 인터페이스 사용:
- CR 파일을 저장합니다.
브로커 배포를 생성하는 프로젝트로 전환합니다.
$ oc project <project_name>
CR 인스턴스를 생성합니다.
$ oc create -f <path/to/custom_resource_instance>.yaml
OpenShift 웹 콘솔 사용:
- CR 구성을 완료하면 생성 을 클릭합니다.
추가 리소스
OpenShift Container Platform의 테인트 및 허용 오차에 대한 자세한 내용은 OpenShift Container Platform 설명서의 노드 테인트를 사용하여 Pod 배치 제어를 참조하십시오.
4.17.3. 유사성 및 유사성 방지 규칙을 사용하여 Pod 배치 제어
노드 유사성, Pod 유사성 또는 Pod 유사성 방지 규칙을 사용하여 Pod 배치를 제어할 수 있습니다. 노드 유사성을 사용하면 Pod에서 대상 노드 그룹에 대한 유사성을 지정할 수 있습니다. Pod 유사성 및 유사성 방지를 사용하면 노드에서 이미 실행 중인 다른 Pod를 기준으로 Pod를 예약할 수 있거나 예약할 수 없는 방법에 대한 규칙을 지정할 수 있습니다.
4.17.3.1. 노드 유사성 규칙을 사용하여 Pod 배치 제어
노드 유사성을 사용하면 브로커 Pod에서 해당 Pod를 배치할 수 있는 노드 그룹에 대한 선호도를 지정할 수 있습니다. Pod에 생성하는 유사성 규칙과 동일한 키-값 쌍이 있는 라벨이 있는 모든 노드에 브로커 Pod를 예약할 수 있습니다.
다음 예제에서는 노드 유사성 규칙을 사용하여 Pod 배치를 제어하도록 브로커를 구성하는 방법을 보여줍니다.
사전 요구 사항
- CR 인스턴스를 사용하여 기본 브로커 배포를 생성하는 방법을 숙지해야 합니다. 3.4.1절. “기본 브로커 인스턴스 배포”을 참조하십시오.
-
OpenShift Container Platform 클러스터의 노드에 공통 레이블을 할당하여 브로커 Pod를 예약할 수 있습니다(예:
zone: emea
).
프로세스
기본 브로커 CRD를 기반으로 CR(사용자 정의 리소스) 인스턴스를 생성합니다.
OpenShift 명령줄 인터페이스 사용:
브로커 배포를 위해 프로젝트에 CR을 배포할 수 있는 권한이 있는 사용자로 OpenShift에 로그인합니다.
oc login -u <user> -p <password> --server=<host:port>
-
다운로드 및 추출한 Operator 설치 아카이브의
deploy/crs
디렉터리에 포함된broker_activemqartemis_cr.yaml
이라는 샘플 CR 파일을 엽니다.
OpenShift Container Platform 웹 콘솔 사용:
- 브로커 배포를 위해 프로젝트에 CR을 배포할 권한이 있는 사용자로 콘솔에 로그인합니다.
- 기본 브로커 CRD를 기반으로 새 CR 인스턴스를 시작합니다. 왼쪽 창에서 → 를 클릭합니다.
- ActiveMQArtemis CRD를 클릭합니다.
- Instances 탭을 클릭합니다.
Create ActiveMQArtemis 를 클릭합니다.
콘솔에서 YAML 편집기가 열리고 CR 인스턴스를 구성할 수 있습니다.
CR의
deploymentPlan
섹션에서affinity
,nodeAffinity
,requiredDuringSchedulingIgnoredDuringExecution
,nodeSelectorTerms
섹션을 추가합니다.nodeSelectorTerms
섹션에서- matchExpressions
매개변수를 추가하고 일치시킬 노드 레이블의 key-value 문자열을 지정합니다. 예를 들면 다음과 같습니다.spec: deploymentPlan: affinity: nodeAffinity: requiredDuringSchedulingIgnoredDuringExecution: nodeSelectorTerms: - matchExpressions: - key: zone operator: In values: - emea
이 예에서 유사성 규칙을 사용하면 키가
zone
이고 값이emea
인 모든 노드에서 Pod를 예약할 수 있습니다.CR 인스턴스를 배포합니다.
OpenShift 명령줄 인터페이스 사용:
- CR 파일을 저장합니다.
브로커 배포를 생성하는 프로젝트로 전환합니다.
$ oc project <project_name>
CR 인스턴스를 생성합니다.
$ oc create -f <path/to/custom_resource_instance>.yaml
OpenShift 웹 콘솔 사용:
- CR 구성을 완료하면 생성 을 클릭합니다.
추가 리소스
OpenShift Container Platform의 유사성 규칙에 대한 자세한 내용은 OpenShift Container Platform 설명서의 노드 유사성 규칙을 사용하여 노드에 대한 Pod 배치 제어를 참조하십시오.
4.17.3.2. 유사성 방지 규칙을 사용하여 다른 Pod에 상대적인 Pod 배치
유사성 방지 규칙을 사용하면 노드에서 이미 실행 중인 Pod의 라벨에 따라 브로커 Pod를 예약할 수 있는 Openshift 노드를 제한할 수 있습니다.
유사성 방지 규칙을 사용하여 단일 장애 지점을 생성하는 동일한 Openshift 노드에 여러 브로커 Pod가 예약되지 않도록 할 수 있습니다.
사전 요구 사항
- 두 개의 별도의 브로커 배포를 생성했습니다. 3.4.1절. “기본 브로커 인스턴스 배포”을 참조하십시오.
프로세스
-
첫 번째 브로커 배포의
ActiveMQArtemis
CR 인스턴스를 편집합니다. CR의
deploymentPlan
섹션에서labels
섹션을 추가합니다. 두 번째 배포의 레이블을 기반으로 anti-affinity 규칙을 생성할 수 있도록 브로커의 식별 레이블을 생성합니다. 예를 들면 다음과 같습니다.spec: ... deploymentPlan: labels: name: broker1
- CR을 저장합니다.
-
두 번째 브로커 배포를 위해
ActiveMQArtemis
CR 인스턴스를 편집합니다. CR의
deploymentPlan
섹션에서affinity
,podAntiAffinity
,requiredDuringSchedulingIgnoredDuringExecution
,labelSelector
섹션을 추가합니다.labelSelector
섹션에서matchExpressions
매개변수를 추가하고 일치시킬 레이블의 키-값 문자열을 지정합니다. 이 배포의 Pod는 일치하는 라벨이 있는 Pod가 포함된 노드에 예약할 수 없습니다.spec: deploymentPlan: affinity: podAntiAffinity: requiredDuringSchedulingIgnoredDuringExecution: - labelSelector: matchExpressions: - key: name operator: In values: - broker1 topologyKey: topology.kubernetes.io/zone
이 예에서 Pod 유사성 방지 규칙은 Pod가
name
이고 값이broker1
인 Pod와 동일한 노드에 배치되지 않으며, 이는 첫 번째 배포의 브로커에 할당된 레이블입니다.- CR을 저장합니다.
추가 리소스
OpenShift Container Platform의 유사성 규칙에 대한 자세한 내용은 OpenShift Container Platform 설명서의 노드 유사성 규칙을 사용하여 노드에 대한 Pod 배치 제어를 참조하십시오.
4.18. 브로커의 로깅 구성
AMQ Broker는 Log4j 2 로깅 유틸리티를 사용하여 메시지 로깅을 제공합니다. 브로커를 배포할 때 기본 Log4j 2 구성을 사용합니다. 기본 구성을 변경하려면 시크릿 또는 configMap에 새 Log4j 2 구성을 생성해야 합니다. secret 또는 configMap의 이름을 기본 브로커 CR(사용자 정의 리소스)에 추가한 후 Operator는 Operator가 각 Pod에 마운트하는 파일에 저장된 새 로깅 구성을 사용하도록 각 브로커를 구성합니다.
사전 요구 사항
- Log4j 2 구성 옵션에 대해 잘 알고 있습니다.
프로세스
AMQ Broker에서 사용할 log4j 2 구성이 포함된 파일을 준비합니다.
브로커가 사용하는 기본 Log4j 2 구성 파일은 각 브로커 Pod의
/home/jboss/amq-broker/etc/log4j2.properties
파일에 있습니다. 기본 구성 파일의 내용을 시크릿 또는 configMap에 새 Log4j 2 구성을 생성하는 기준으로 사용할 수 있습니다. 기본 Log4j 2 구성 파일의 내용을 가져오려면 다음 단계를 완료합니다.OpenShift Container Platform 웹 콘솔 사용:
- → 를 클릭합니다.
- ex-aao-ss s Pod를 클릭합니다.
- 터미널 탭을 클릭합니다.
-
cat
명령을 사용하여 브로커 포드에/home/jboss/amq-broker/etc/log4j2.properties
파일의 내용을 표시하고 콘텐츠를 복사합니다. -
OpenShift Container Platform CLI가 설치된 로컬 파일에 콘텐츠를 붙여넣고 파일을
logging.properties
로 저장합니다.
OpenShift 명령줄 인터페이스 사용:
배포에서 Pod 이름을 가져옵니다.
$ oc get pods -o wide NAME STATUS IP amq-broker-operator-54d996c Running 10.129.2.14 ex-aao-ss-0 Running 10.129.2.15
oc cp
명령을 사용하여 Pod에서 로컬 디렉터리로 로그 구성 파일을 복사합니다.$ oc cp <pod name>:/home/jboss/amq-broker/etc/log4j2.properties logging.properties -c <name>-container
여기서 <name> 부분은 컨테이너 이름의
-ss
문자열 앞에 있는 접두사입니다. 예를 들면 다음과 같습니다.$ oc cp ex-aao-ss-0:/home/jboss/amq-broker/etc/log4j2.properties logging.properties -c ex-aao-container
참고파일에서 configMap 또는 보안을 생성할 때 configMap 또는 secret의 키는 파일 이름으로 기본 설정되고 값은 파일 콘텐츠로 설정됩니다.
logging.properties
라는 파일에서 보안을 생성하면 새 로깅 구성에 필요한 키가 secret 또는 configMap에 삽입됩니다.
logging.properties
파일을 편집하고 AMQ Broker에서 사용할 Log4j 2 구성을 생성합니다.예를 들어 기본 구성을 사용하면 AMQ Broker는 메시지를 콘솔에만 기록합니다. AMQ Broker가 디스크에 메시지를 기록하도록 구성을 업데이트할 수 있습니다.
업데이트된 Log4j 2 구성을 시크릿 또는 ConfigMap에 추가합니다.
브로커 배포를 위해 프로젝트에서 시크릿 또는 ConfigMap을 생성할 수 있는 권한이 있는 사용자로 OpenShift에 로그인합니다.
oc login -u <user> -p <password> --server=<host:port>
시크릿에 로그 설정을 구성하려면
oc create secret
명령을 사용합니다. 예를 들면 다음과 같습니다.oc create secret generic newlog4j-logging-config --from-file=logging.properties
ConfigMap에서 로그 설정을 구성하려면
oc create configmap
명령을 사용합니다. 예를 들면 다음과 같습니다.oc create configmap newlog4j-logging-config --from-file=logging.properties
Operator에 새 로깅 구성이 포함되어 있음을 인식할 수 있도록 configMap 또는 시크릿 이름의 접미사가
-logging-config
여야 합니다.
브로커 배포의 CR(사용자 정의 리소스) 인스턴스에 시크릿 또는 ConfigMap을 추가합니다.
OpenShift 명령줄 인터페이스 사용:
브로커 배포를 위해 프로젝트에 CR을 배포할 수 있는 권한이 있는 사용자로 OpenShift에 로그인합니다.
oc login -u <user> -p <password> --server=<host:port>
CR을 편집합니다.
oc edit ActiveMQArtemis <CR instance name> -n <namespace>
OpenShift Container Platform 웹 콘솔 사용:
- 브로커 배포를 위해 프로젝트에 CR을 배포할 권한이 있는 사용자로 콘솔에 로그인합니다.
- 왼쪽 창에서 → 를 클릭합니다.
- Red Hat Integration - AMQ Broker for RHEL 8 (Multiarch) Operator를 클릭합니다.
- AMQ Broker 탭을 클릭합니다.
- ActiveMQArtemis 인스턴스 이름을 클릭합니다.
YAML 탭을 클릭합니다.
콘솔에서 YAML 편집기가 열리고 CR 인스턴스를 구성할 수 있습니다.
Log4j 2 로깅 구성이 포함된 secret 또는 configMap을 CR에 추가합니다. 다음 예제에서는 CR에 추가된 보안 및 configMap을 보여줍니다.
apiVersion: broker.amq.io/v1beta1 kind: ActiveMQArtemis metadata: name: ex-aao spec: deploymentPlan: ... extraMounts: secrets: - "newlog4j-logging-config" ...
apiVersion: broker.amq.io/v1beta1 kind: ActiveMQArtemis metadata: name: ex-aao spec: deploymentPlan: ... extraMounts: configMaps: - "newlog4j-logging-config" ...
- CR을 저장합니다.
각 브로커 Pod에서 Operator는 생성한 시크릿 또는 configMap에 로깅 구성이 포함된 logging.properties
파일을 마운트합니다. 또한 Operator는 기본 로그 구성 파일 대신 마운트된 로그 구성 파일을 사용하도록 각 브로커를 구성합니다.
configMap 또는 시크릿에서 로깅 구성을 업데이트하면 각 브로커는 업데이트된 로깅 구성을 자동으로 사용합니다.
4.19. Pod 중단 예산 구성
Pod 중단 예산은 유지 관리 창과 같이 자발적으로 중단되는 동안 동시에 사용할 수 있어야 하는 클러스터의 최소 Pod 수를 지정합니다.
프로세스
브로커 배포의 CR 인스턴스를 편집합니다.
OpenShift 명령줄 인터페이스 사용:
- 브로커 배포를 위해 프로젝트에 CR을 배포할 수 있는 권한이 있는 사용자로 OpenShift Container Platform에 로그인합니다.
배포에 사용할 CR을 편집합니다.
oc edit ActiveMQArtemis <CR instance name> -n <namespace>
OpenShift Container Platform 웹 콘솔 사용:
- 브로커 배포를 위해 프로젝트에 CR을 배포할 수 있는 권한이 있는 사용자로 OpenShift Container Platform에 로그인합니다.
- 왼쪽 창에서 → 를 클릭합니다.
- ActiveMQArtemis CRD를 클릭합니다.
- Instances 탭을 클릭합니다.
- 브로커 배포에 사용할 인스턴스를 클릭합니다.
YAML 탭을 클릭합니다.
콘솔에서 YAML 편집기가 열리고 CR 인스턴스를 편집할 수 있습니다.
CR의
spec
섹션에서podDisruptionBudget
요소를 추가하고 자발적으로 중단하는 동안 사용할 수 있어야 하는 배포의 최소 Pod 수를 지정합니다. 다음 예에서는 최소 하나의 Pod를 사용할 수 있어야 합니다.spec: ... podDisruptionBudget: minAvailable: 1 ...
- CR을 저장합니다.
추가 리소스
Pod 중단 예산에 대한 자세한 내용은 Pod 중단 예산을 사용하여 OpenShift Container Platform 설명서에서 작동해야 하는 Pod 수를 지정하는 방법 이해 를 참조하십시오.
4.20. 관리 작업에 대한 역할 기반 액세스 제어 구성
RBAC(역할 기반 액세스 제어)는 속성 및 메서드의 액세스를 제한하는 데 사용됩니다. Cryostat는 AMQ Broker에서 관리 작업을 지원하기 위해 관리 API를 노출하는 방법입니다. 이전에는 ActiveMQArtemisSecurity
CR(사용자 정의 리소스)에서 RBAC 구성을 설정하고 변경 사항을 적용하기 위해 브로커를 다시 시작하여 Cryostat에 대한 액세스를 제한할 수 있었습니다. 7.12부터 ActiveMQArtemis
CR의 Cryostat에 대한 액세스를 제한할 수 있으며 변경 사항을 적용하려면 브로커를 다시 시작할 필요가 없습니다.
프로세스
-
브로커 배포에 사용할
ActiveMQArtemis
CR 인스턴스를 편집합니다. 다음 환경 변수를 추가하여
ActiveMQArtemis
CR에 지정하는 RBAC 구성을 사용하도록 브로커를 구성합니다.spec: .. env: - name: JAVA_ARGS_APPEND value: "-Dhawtio.role=* -Djavax.management.builder.initial=org.apache.activemq.artemis.core.server.management.ArtemisRbacMBeanServerBuilder" ..
brokerProperties
속성에서 관리 작업에 대한 역할 기반 액세스 제어 구성을 추가합니다.관리 작업의 일치 주소 형식은 다음과 같습니다.
mops.<리소스 유형otherwise리소스 이름>.<작업>
예를 들어 다음 구성은
manager
역할보기를
부여하고activemq.management
주소에 대한편집
권한을 부여합니다. 작업 위치의 별표(*)는 모든 작업에 대한 액세스 권한을 부여합니다.spec: .. brokerProperties: - securityRoles."mops.address.activemq.management.*".manager.view=true - securityRoles."mops.address.activemq.management.*".manager.edit=true
다음 예에서
mops
접두사 뒤의 숫자 기호(#)는amq
역할보기를
부여하고 모든 Cryostat에 대한 권한을편집합니다
.spec: .. brokerProperties: - securityRoles."mops.#".amq.view=true - securityRoles."mops.#".amq.edit=true ..
다음 예와 같이
resourceTemplates
속성을 사용하여 스크립트를 실행하는 init 컨테이너를 정의하여 각 브로커 컨테이너의/amq/init/config/amq-broker/etc/management.xml
파일에서 기본 RBAC 구성을 제거합니다. 브로커가ActiveMQArtemis
CR에서 생성한 새 RBAC 구성을 사용하도록 기본 RBAC 구성을 제거해야 합니다.spec: .. resourceTemplates: - selector: kind: "StatefulSet" patch: kind: "StatefulSet" spec: template: spec: initContainers: - name: "<BROKER_NAME>-container-init" args: - '-c' - '/opt/amq/bin/launch.sh && /opt/amq-broker/script/default.sh; echo "Empty management.xml";echo "<management-context xmlns=\"http://activemq.apache.org/schema\" />" > /amq/init/config/amq-broker/etc/management.xml'
<BROKER_NAME>을 CR 인스턴스의
metadata.name
속성 값으로 바꿉니다.- CR을 저장합니다.
4.21. Operator에서 생성한 Openshift 리소스 사용자 정의
AMQ Broker 배포는 배포, Pod, 상태 저장 세트 및 서비스 리소스와 같은 OpenShift 리소스를 생성합니다. 이러한 리소스는 AMQ Broker Operator가 관리합니다. 특정 OpenShift 리소스를 관리하는 Operator만 해당 리소스를 변경할 수 있습니다.
다음과 같은 특정 작업을 수행하려는 경우 Operator가 관리하는 OpenShift 리소스를 사용자 정의하는 것이 유용할 수 있습니다.
- 다른 서비스에서 리소스를 처리하는 방법을 제어하는 사용자 지정 주석을 추가합니다.
- 브로커 사용자 정의 리소스에 노출되지 않는 속성 수정
resourceTemplates
속성을 사용하여 AMQ Broker Operator가 생성한 리소스를 사용자 지정할 수 있습니다. 리소스에 주석 또는 레이블을 추가하려면 주석 또는 라벨 속성을 포함하도록 resourceTemplates
속성을 구성합니다.
다음 예에서
annotations
속성은 Operator가 관리하는 모든 서비스에 주석을 추가하는 데 사용됩니다.
spec: .. resourceTemplates: - selector: kind: "Service" annotations: name: "amq-operator-managed" ..
selector
속성은 사용자 지정되는 Operator 관리 리소스를 결정합니다. 예를 들어 selector
값은 kind: "Service"
이며 모든 서비스 리소스를 사용자 지정합니다. selector
속성이 비어 있으면 모든 Operator 관리 리소스에 변경 사항이 적용됩니다.
리소스에 대한 주석 또는 레이블이 아닌 항목을 사용자 지정하려면 resourceTemplates
속성과 함께 patch
속성을 사용해야 합니다. patch
속성을 지정하면 Operator는 전략적 병합을 사용하여 리소스를 업데이트합니다.
patch
속성을 사용하는 경우 업데이트할 특정 리소스를 식별하려면 selector
속성을 채워야 합니다.
다음 예에서 patch
속성은 StatefulSet
리소스에서 minReadySeconds
속성의 기본값을 변경하는 데 사용됩니다.
spec: .. resourceTemplates: - selector: kind: "StatefulSet" patch: kind: "StatefulSet" spec: template: spec: minReadySeconds: 10 ..
추가 리소스
전략적 병합에 대한 자세한 내용은 전략적 병합 패치를 사용하여 배포 업데이트를 참조하십시오.
4.22. AMQ Broker에 플러그인 등록
CR의 brokerProperties
속성에 플러그인을 등록하여 AMQ Broker의 기능을 확장할 수 있습니다.
프로세스
- 브로커 배포의 CR(사용자 정의 리소스)을 편집합니다.
brokerProperties
속성에서 플러그인의 클래스 이름을 지정하고 플러그인의 속성을 정의하는 <key>=<value> 쌍의 쉼표로 구분된 문자열을 포함합니다.다음 예에서는 AMQ Broker와 함께 제공되는
LoggingActiveMQServerPlugin
플러그인이 등록됩니다.spec: ... brokerProperties: - brokerPlugins.\"org.apache.activemq.artemis.core.server.plugin.impl.LoggingActiveMQServerPlugin.class\".init=LOG_CONNECTION_EVENTS=true,LOG_SESSION_EVENTS=true,LOG_CONSUMER_EVENTS=true ...
CR을 저장합니다.
플러그인 인스턴스가 생성되면 init 메서드가 플러그인의 속성을 설정하는 데 사용되는 <key>=<value> 쌍을 포함하는 문자열을 전달합니다.
사용자 지정 플러그인을 생성하는 경우 플러그인 클래스의 JAR 파일이 브로커의 Java 클래스 경로에 있는지 확인합니다. 자세한 내용은 4.4절. “타사 JAR 파일 추가”의 내용을 참조하십시오.
4.22.1. brokerProperties
구성 분리
CR에 brokerProperties
섹션이 포함되어 있고 CR이 최대 크기 제한 1MB인 경우 brokerProperties
구성을 하나 이상의 Java 속성 파일로 분리할 수 있습니다. 또한 별도의 파일에서 brokerProperties
구성을 분리하여 유지 관리를 위해 brokerProperties
항목을 논리적으로 그룹화해야 할 수 있습니다.
프로세스
브로커에 적용할
brokerProperties
구성이 포함된 Java 속성 형식으로 파일을 생성합니다. 속성 파일에서 각 속성을 별도의 줄에 추가합니다. 예를 들면 다음과 같습니다.securityRoles.address1.group2.send=true securityRoles.address2.group1.consume=true securityRoles.address2.group2.createAddress=true
-
.properties
확장자를 사용하여 파일을 저장합니다(예:securityRoles.properties
). 생성한
.properties
파일이 포함된 보안을 생성합니다.oc create secret generic address-settings-bp --from-file=securityRoles.properties
참고시크릿 이름에는
-bp
접미사가 있어야 합니다. 시크릿에-bp
접미사가 있는 경우 Operator는 브로커가 브로커 Pod에 마운트된 디렉터리에서 속성 파일을 검색하도록 구성합니다.Operator가 각 브로커 Pod의 시크릿에 있는 속성 파일을 마운트하도록
extraMounts
속성 속성의 보안에 대한 참조를 추가합니다.deploymentPlan: ... extraMounts: secrets: - "address-settings-bp" ...
Operator는 시크릿에 있는
.properties
파일을 각 브로커 Pod의/amq/extra/secrets/ <secret name
> 디렉터리에 마운트합니다.시작 시 브로커는
.properties
확장자가 있는 파일을 각각 마운트하고, 파일을 알파벳순으로 정렬하고, 파일의 구성을 차례로 적용합니다. 속성 파일 내에서 브로커는 속성이 나열된 순서대로 적용됩니다.
4.23. 고가용성을 위해 leader-follower 브로커 배포 구성
leader-follower 구성에는 별도의 배포에 단일 브로커가 있습니다. 각 배포의 브로커는 동일한 JDBC 데이터베이스를 사용하여 메시지를 저장하도록 구성해야 합니다. 데이터베이스 전용 액세스 권한을 부여하는 JDBC 잠금을 얻기 위해 경쟁하는 브로커에 의해 고가용성을 달성합니다. JDBC 잠금을 얻는 브로커는 클라이언트 요청을 제공하는 리더 브로커가 됩니다. JDBC 잠금을 취득하지 못하는 브로커는 후속 조치가 됩니다. 팔로워는 지속적으로 JDBC 잠금을 획득하려고 시도하며, 성공하면 즉시 클라이언트를 제공하는 리더가 됩니다.
leader-follower 배포는 하나 이상의 브로커를 사용하는 단일 배포를 위해 Openshift에서 제공하는 노드 장애로부터 복구(MTTR)할 때 보다 신속하게 복구(MTTR)할 수 있습니다. 리더-추어 배포에서 브로커는 클러스터 장애로부터 보호하기 위해 별도의 클러스터에 있을 수 있습니다. 이러한 클러스터는 다른 데이터 센터에 있을 수 있으므로 데이터 센터 중단에 브로커 서비스를 탄력적으로 만들 수도 있습니다.
사전 요구 사항
AMQ Broker에서 사용하려는 JDBC 데이터베이스의 JAR 파일이 포함된 컨테이너 이미지가 있습니다. 컨테이너 이미지 생성에 대한 자세한 내용은 Openshift 설명서에서 이미지 생성 을 참조하십시오. 각 브로커의 구성에서 init 컨테이너를 지정하여 컨테이너 이미지에서 런타임 시 브로커에 사용할 수 있는 위치로 JAR 파일을 복사할 수 있습니다.
별도의 브로커 배포를 생성하도록 두 개의
ActiveMQArtemis
사용자 지정 리소스 인스턴스를 구성합니다.각 사용자 정의 리소스에서 고유한 이름을 지정하고
클러스터형
및persistenceEnabled
속성이false
로 설정되어 있는지 확인합니다.size
속성을1
로 설정하여 각 배포에서 단일 브로커를 생성합니다. 예를 들면 다음과 같습니다.apiVersion: broker.amq.io/v1beta1 kind: ActiveMQArtemis metadata: name: peer-broker-a spec: deploymentPlan: size: 1 clustered: false persistenceEnabled: false
apiVersion: broker.amq.io/v1beta1 kind: ActiveMQArtemis metadata: name: peer-broker-b spec: deploymentPlan: size: 1 clustered: false persistenceEnabled: false
참고동일한 Openshift 클러스터에서 두 브로커 배포를 모두 구성하는 경우 브로커 Pod가 클러스터의 개별 노드에 프로비저닝되므로 두 브로커는 노드 장애의 영향을 받지 않습니다. 노드에서 Pod 배치를 제어하는 방법에 대한 자세한 내용은 4.17절. “OpenShift Container Platform 노드에서 브로커 Pod 배치 제어” 을 참조하십시오.
각 브로커 구성에 활성 프로브를 추가합니다.
활성 상태 프로브를 구성하지 않으면 브로커의 상태를 확인하기 위해 기본 프로브가 활성화됩니다. 기본 프로브는 AMQ 관리 콘솔에 연결할 수 있는지 확인합니다. leader-follower 구성에서 특정 시간에 후속 조치인 브로커의 AMQ 관리 콘솔에 연결할 수 없으므로 해당 브로커에서 활성 프로브가 실패합니다. 활성 프로브가 실패할 때마다 브로커를 재시작하여 브로커를 영구 재시작 루프에 배치합니다. 결과적으로 후속 브로커는
CrashLoopBackOff
상태로 전환되고 현재 리더가 실패하면 리더가 될 수 없습니다.기본 활성 프로브가 실행되지 않도록 하려면 브로커가 리더 또는 후속자일 때 성공적으로 실행할 수 있는 활성 상태 프로브를 구성해야 합니다. 다음 예에서 활성 프로브는 브로커를 실행하는 명령이 실행되었는지 확인합니다. 이 명령은
cli.lock
파일의 존재로 표시됩니다.spec: .. livenessProbe: exec: command: - test - -f - /home/jboss/amq-broker/lock/cli.lock ..
활성 프로브 구성에 대한 자세한 내용은 4.15.2절. “활성 상태 프로브 및 준비 상태 프로브 구성” 을 참조하십시오.
각 브로커 구성에서
brokerProperties
속성을 사용하여 JDBC 데이터베이스 지속성을 활성화합니다. 예를 들면 다음과 같습니다.spec: .. brokerProperties: - storeConfiguration=DATABASE - storeConfiguration.jdbcDriverClassName=<class name> - storeConfiguration.jdbcConnectionUrl=jdbc:<Database URL> - HAPolicyConfiguration=SHARED_STORE_PRIMARY - storeConfiguration.jdbcLockRenewPeriodMillis=2000 - storeConfiguration.jdbcLockExpirationMillis=6000
JDBC 데이터베이스 지속성 활성화에 대한 자세한 내용은 4.5.2절. “데이터베이스 지속성 구성” 을 참조하십시오.
각 브로커 구성에서 JDBC 데이터베이스에 연결하는 데 필요한 JAR 파일을 로드하도록 브로커를 구성합니다.
-
resourceTemplates
특성을 사용하여 각 브로커에 대한StatefulSet
리소스를 사용자 지정합니다. 사용자 지정에서patch
속성을 사용하여 준비한 사용자 지정 컨테이너 이미지에서 JAR 파일을 브로커 Pod에 복사하는 init 컨테이너를 지정합니다. env
속성을 사용하여ARTEMIS_EXTRA_LIBS
환경 변수를 생성하여 JDBC 데이터베이스의 JAR 파일이 복사되는 디렉터리를 포함하도록 브로커의 Java 클래스 경로를 확장합니다. Java classpath를 확장하면 브로커는 런타임 시 Pod의 지정된 디렉터리에서 JAR 파일을 로드할 수 있습니다.spec: .. env: - name: ARTEMIS_EXTRA_LIBS value: '/amq/init/config/extra-libs' resourceTemplates: - selector: kind: StatefulSet patch: kind: StatefulSet spec: template: spec: initContainers: - name: jdbc-driver-init image: <custom container image with JAR> volumeMounts: - name: amq-cfg-dir mountPath: /amq/init/config command: - "bash" - "-c" - "mkdir -p /amq/init/config/extra-libs && cp <__JAR file_> /amq/init/config/extra-libs"
Operator에서 생성한 Openshift 리소스를 사용자 정의하는 방법에 대한 자세한 내용은 4.21절. “Operator에서 생성한 Openshift 리소스 사용자 정의” 을 참조하십시오.
-
각 사용자 정의 리소스를 저장합니다.
- 예
다음 예제에서는 Oracle 데이터베이스를 사용하는 leader-follower 브로커 배포를 위한 전체 구성을 보여줍니다.
apiVersion: broker.amq.io/v1beta1 kind: ActiveMQArtemis metadata: name: peer-broker-a spec: deploymentPlan: size: 1 clustered: false persistenceEnabled: false livenessProbe: exec: command: - test - -f - /home/jboss/amq-broker/lock/cli.lock env: - name: ARTEMIS_EXTRA_LIBS value: '/amq/init/config/extra-libs' brokerProperties: - criticalAnalyser=false - storeConfiguration=DATABASE - storeConfiguration.jdbcDriverClassName=oracle.jdbc.OracleDriver - storeConfiguration.jdbcConnectionUrl=jdbc:<Database URL> - storeConfiguration.jdbcLockRenewPeriodMillis=2000 - storeConfiguration.jdbcLockExpirationMillis=6000 - HAPolicyConfiguration=SHARED_STORE_PRIMARY acceptors: - name: ext-acceptor protocols: CORE port: 61626 expose: true sslEnabled: true sslSecret: ext-acceptor-ssl-secret console: expose: true resourceTemplates: - selector: kind: StatefulSet patch: kind: StatefulSet spec: template: spec: initContainers: - name: oracle-database-jdbc-driver-init image: <custom container image with JAR> volumeMounts: - name: amq-cfg-dir mountPath: /amq/init/config command: - "bash" - "-c" - "mkdir -p /amq/init/config/extra-libs && cp <JAR file> /amq/init/config/extra-libs"
apiVersion: broker.amq.io/v1beta1 kind: ActiveMQArtemis metadata: name: peer-broker-b spec: deploymentPlan: size: 1 clustered: false persistenceEnabled: false livenessProbe: exec: command: - test - -f - /home/jboss/amq-broker/lock/cli.lock env: - name: ARTEMIS_EXTRA_LIBS value: '/amq/init/config/extra-libs' brokerProperties: - criticalAnalyser=false - storeConfiguration=DATABASE - storeConfiguration.jdbcDriverClassName=oracle.jdbc.OracleDriver - storeConfiguration.jdbcConnectionUrl=jdbc:<Database URL> - storeConfiguration.jdbcLockRenewPeriodMillis=2000 - storeConfiguration.jdbcLockExpirationMillis=6000 - HAPolicyConfiguration=SHARED_STORE_PRIMARY acceptors: - name: ext-acceptor protocols: CORE port: 61626 expose: true sslEnabled: true sslSecret: ext-acceptor-ssl-secret console: expose: true resourceTemplates: - selector: kind: StatefulSet patch: kind: StatefulSet spec: template: spec: initContainers: - name: oracle-database-jdbc-driver-init image: <custom container image with JAR> volumeMounts: - name: amq-cfg-dir mountPath: /amq/init/config command: - "bash" - "-c" - "mkdir -p /amq/init/config/extra-libs && cp <JAR file> /amq/init/config/extra-libs"
4.24. 재해 복구를 위한 데이터 미러링 구성
미러링은 재해 복구를 위해 브로커에서 하나 이상의 다른 브로커로 데이터를 복사하는 프로세스입니다. 미러의 소스 및 대상 브로커는 데이터 센터 중단을 방지하기 위해 다른 데이터 센터의 별도의 OpenShift 클러스터에 있을 수 있습니다. 미러링은 데이터 백업에 사용하거나 유지 관리 기간 중에 사용할 장애 조치 브로커를 생성할 수도 있습니다.
미러가 생성되기 전에 존재하는 메시지는 미러링되지 않습니다.
프로세스
두 개의
ActiveMQArtemis
CR(사용자 정의 리소스) 인스턴스를 구성하여 소스 브로커와 미러링된 데이터에 대한 대상 브로커를 생성합니다. 각각에 대해 고유한 이름을 지정합니다. 예를 들면 다음과 같습니다.apiVersion: broker.amq.io/v1beta1 kind: ActiveMQArtemis metadata: name: production-broker namespace: production spec: deploymentPlan: size: 1
apiVersion: broker.amq.io/v1beta1 kind: ActiveMQArtemis metadata: name: mirror-broker namespace: dr spec: deploymentPlan: size: 1
대상 브로커의 CR에 미러 연결에 대한 어셉터를 추가합니다. 예를 들면 다음과 같습니다.
metadata: name: mirror-broker namespace: dr spec: ... acceptors: - expose: true name: amqp port: 5672 protocols: amqp ...
어셉터를 생성하면 다음 형식으로 수락자에 대한 경로가 노출됩니다.
<브로커 이름>-<수락자 이름>-<ordinal>-svc-rte.<namespace>.<hostname>
이 절차의 뒷부분에서 소스 브로커에 미러 구성을 추가하면 이 경로를 사용하여 대상 브로커에 대한 연결을 생성합니다.
<ordinal>은 StatefulSet에 의해 브로커 Pod에 할당된 서수입니다. 클러스터의 첫 번째 브로커 포드에 0이 할당됩니다. 두 번째 포드에는 1의 오디널이 할당됩니다. Pod의 ordinal 값은
STATEFUL_SET_ORDINAL
변수에 저장됩니다. 소스 브로커의 미러 연결 세부 정보에서 서수 값 대신 이 변수를 사용할 수 있습니다. 예를 들면 다음과 같습니다.<브로커 이름>-<수락자 이름>-$STATEFUL_SET_ORDINAL}-svc-rte.<namespace>.<hostname>
STATEFUL_SET_ORDINAL
변수를 사용하면 소스 및 대상 클러스터의 브로커 수를 확장하면 소스가 동일한 오디네탈 대상에 대한 미러 연결을 생성해야 합니다.미러 연결을 통해 데이터를 안전하게 보내려면 연결에 대한 TLS(Transport Layer Security)를 구성합니다. 요구 사항에 따라 다양한 방법을 사용하여 SSL/TLS 인증서를 생성할 수 있습니다. 예를 들어 신뢰할 수 있는 CA(인증 기관), cert-manager Operator for OpenShift 또는 SSL(Secure Sockets Layer) 툴을 사용할 수 있습니다.
다음 예제에서는 SSL/TLS 툴을 사용하여 자체 서명된 인증서를 수동으로 생성하여 브로커 간에 상호 TLS 인증(mTLS)을 구성하는 단계를 요약합니다.
대상 브로커의 자체 서명된 SSL/TLS 인증서를 생성합니다. 예를 들면 다음과 같습니다.
keytool -genkey -trustcacerts -alias 브로커 -keyalg RSA -keystore broker.ks -keypass 암호 -storepass 암호
생성한 SSL/TLS 인증서의 공개 키를 파일로 내보내 소스 브로커에서 사용할 키를 신뢰 저장소 파일로 가져올 수 있습니다. 예를 들면 다음과 같습니다.
keytool -export -noprompt -alias broker -keystore broker.ks -file for_source_truststore -storepass 암호
소스 브로커에서 사용할 신뢰 저장소 파일로 내보낸 SSL/TLS 인증서의 공개 키를 가져옵니다. 예를 들면 다음과 같습니다.
keytool -import -noprompt -trustcacerts -alias broker -keystore client.ts -file for_source_truststore -storepass 암호
소스 브로커의 자체 서명된 SSL/TLS 인증서를 생성합니다. 예를 들면 다음과 같습니다.
keytool -genkey -trustcacerts -alias 브로커 -keyalg RSA -keystore broker.ks -keypass 암호 -storepass 암호
생성한 SSL/TLS 인증서의 공개 키를 내보내 대상 브로커에서 사용할 키를 신뢰 저장소 파일로 가져올 수 있습니다.
keytool -export -noprompt -alias broker -keystore broker.ks -file for_target_truststore -storepass 암호
대상 브로커에서 사용할 신뢰 저장소 파일로 내보낸 SSL/TLS 인증서의 공개 키를 가져옵니다. 예를 들면 다음과 같습니다.
keytool -import -noprompt -trustcacerts -alias broker -keystore client.ts -file for_target_truststore -storepass 암호
소스 브로커용으로 생성한 키 저장소 및 신뢰 저장소 파일을 소스 브로커의 네임스페이스에 있는 시크릿에 추가합니다. 예를 들면 다음과 같습니다.
oc create secret generic mirror --from-file=broker.ks=broker.ks --from-file=client.ts --from-literal=keyStorePassword=password --from-literal=trustStorePassword=password
이 단계를 반복하여 대상 브로커에 대해 생성한 키 저장소 및 신뢰 저장소 파일을 대상 브로커의 네임스페이스의 시크릿에 추가합니다.
대상 브로커에 대해 구성된 수락자에서
sslEnabled
속성을true
로 설정하고 대상 브로커의 네임스페이스에서 생성한 시크릿 이름을 지정합니다. 예를 들면 다음과 같습니다.metadata: name: mirror-broker namespace: dr spec: ... acceptors: - expose: true name: amqp port: 5672 protocols: amqp sslEnabled: true sslSecret: mirror ...
소스 브로커의 CR에서 소스 브로커의 네임스페이스에서 생성한 보안에 대한 참조를
extraMounts
속성에 추가합니다. Operator가 각 브로커 Pod의 시크릿에 키 저장소 및 신뢰 저장소 파일을 마운트하려면 이 단계가 필요합니다. 예를 들면 다음과 같습니다.spec: ... deploymentPlan: extraMounts: secrets: - mirror ...
시크릿의 키 저장소 및 신뢰 저장소 파일은 브로커 Pod의
/amq/extra/secrets/<시크릿 이름
> 디렉터리에 마운트됩니다.
소스 브로커의 CR에서
brokerProperties
속성 아래에 있는 미러 연결 세부 정보를 구성합니다. 연결 URI의 경우 대상 브로커에서 생성한 어셉터에 대해 노출된 경로를 지정합니다. SSL/TLS를 사용하여 미러 연결을 보호하려면 URI에 다음을 포함합니다.- 포트 번호 443
-
SSL/TLS를 활성화하는
sslEnabled=true
- 키 저장소 및 신뢰 저장소 파일의 경로와 인증 정보
예를 들면 다음과 같습니다.
spec: ... brokerProperties: - AMQPConnections.datacenter1.uri=tcp://broker-dr-amqp-${STATEFUL_SET_ORDINAL}-svc-rte-dr.apps.lab.redhat.com:443?;sslEnabled=true;trustStorePath=/amq/extra/secrets/mirror/client.ts;trustStorePassword=password;keyStorePath=/amq/extra/secrets/mirror/broker.ks;keyStorePassword=password - AMQPConnections.datacenter1.connectionElements.mirror.type=MIRROR ...
참고필요한 경우 소스 브로커에 대한 여러 미러 대상을 구성할 수 있습니다. 예를 들면 다음과 같습니다.
spec: ... brokerProperties: - AMQPConnections.datacenter1.uri=tcp://primary-mirror-broker-amqp-${STATEFUL_SET_ORDINAL}-svc.dr.svc.cluster.local:61616 - AMQPConnections.datacenter1.connectionElements.mirror.type=MIRROR - AMQPConnections.datacenter2.uri=tcp://backup-mirror-broker-amqp-${STATEFUL_SET_ORDINAL}-svc.dr.svc.cluster.local:61616 - AMQPConnections.datacenter2.connectionElements.mirror.type=MIRROR ...
소스 브로커의 CR에서 필요에 따라 추가 미러 구성 속성을 구성합니다. 예를 들면 다음과 같습니다.
- AMQPConnections.datacenter1.user=admin - AMQPConnections.datacenter1.password=admin - AMQPConnections.datacenter1.retryInterval=5000 - AMQPConnections.datacenter1.connectionElements.mirror.messageAcknowledgements=true - AMQPConnections.datacenter1.connectionElements.mirror.queueCreation=true - AMQPConnections.datacenter1.connectionElements.mirror.queueRemoval=true - AMQPConnections.datacenter1.connectionElements.mirror.addressFilter=addresses
참고영숫자 문자열을 사용하여 AMQP 연결의 이름을 지정할 수 있습니다. 이전 예에서 AMQP 연결 이름은
datacenter1
입니다.- AMQPConnections.<name>.user
- 필요한 이벤트를 미러링할 수 있는 권한이 있는 대상 브로커의 사용자 이름입니다.
- AMQPConnections.<이름>.password
- 대상 브로커에 있는 사용자의 암호입니다.
- AMQPConnections.<name>.retryInterval
- 대상 브로커에 연결을 시도하는 사이의 간격(밀리초)입니다.
- AMQPConnections.<name>.connectionElements.mirror.messageAcknowledgements
-
메시지 승인이 미러링되는지 여부를 지정합니다. 기본값은
true
입니다. - AMQPConnections.<name>.connectionElements.mirror.queueCreation
-
큐 또는 주소 생성 이벤트가 미러링되는지 여부를 지정합니다. 기본값은
true
입니다. - AMQPConnections.<name>.connectionElements.mirror.queueRemoval
-
큐 또는 주소 제거 이벤트가 미러링되는지 여부를 지정합니다. 기본값은
true
입니다. - AMQPConnections.<name>.connectionElements.mirror.addressFilter
소스 브로커가 이벤트가 미러링되는 주소를 포함하거나 제외하는 데 사용할 수 있는 필터입니다. 예를 들어 임시 큐가 미러링되지 않도록 제외하려고 할 수 있습니다.
필터를 쉼표로 구분된 주소 목록으로 지정합니다. 제외할 주소 목록을 지정하려면 각 주소 앞에 느낌표(!)를 추가합니다. 다음 예에서
us.
및europe.
로 시작하는 주소에 대한 이벤트는 미러링되지 않습니다.AMQPConnections.<name>.connectionElements.mirror.addressFilter=!us.,!europe.
참고포함할 주소를 하나 이상 지정하면 다른 모든 주소에 대한 이벤트가 미러링되지 않습니다. 제외할 주소를 하나 이상 지정하면 다른 모든 주소에 대한 이벤트가 미러링됩니다.
-
소스 브로커에 대한 CR의
status
섹션에서BrokerPropertiesApplied
조건의 상태가true
인지 확인하여 CR에 지정한 모든 속성이 적용되었는지 확인합니다. 자세한 내용은 3.7절. “브로커 배포에 대한 상태 정보 보기”의 내용을 참조하십시오. 다음과 유사한 행이 소스 브로커 Pod의 로그를 확인하여 미러 연결이 설정되었는지 확인합니다.
broker-prod-ss-0 broker-prod-container Connected 서버 AMQP 연결 dr의 broker-dr-amqp-0-svc-rte-dr.lab.redhat.com:443 후 0 재시도 후
5장. Operator 기반 브로커 배포를 위한 AMQ 관리 콘솔에 연결
Operator 기반 배포의 각 브로커 Pod는 포트 8161에서 AMQ 관리 콘솔의 자체 인스턴스를 호스팅합니다.
다음 절차에서는 배포된 브로커를 위해 AMQ 관리 콘솔에 연결하는 방법을 설명합니다.
사전 요구 사항
- AMQ Broker Operator를 사용하여 브로커 배포를 생성했습니다. 예를 들어 샘플 CR을 사용하여 기본 브로커 배포를 생성하는 방법을 알아보려면 3.4.1절. “기본 브로커 인스턴스 배포” 를 참조하십시오.
- 배포의 브로커에 대해 AMQ 관리 콘솔에 대한 액세스를 활성화했습니다. AMQ Management Console에 대한 액세스 활성화에 대한 자세한 내용은 4.8절. “AMQ 관리 콘솔에 대한 액세스 활성화” 을 참조하십시오.
5.1. AMQ 관리 콘솔에 연결
브로커 배포에 대한 CR(사용자 정의 리소스) 인스턴스에서 AMQ 관리 콘솔에 대한 액세스를 활성화하면 Operator는 AMQ Management Console에 대한 액세스를 제공할 각 브로커 Pod에 대한 전용 서비스 및 경로를 자동으로 생성합니다.
자동으로 생성된 서비스의 기본 이름은 < custom-resource-name> -wconsj- <broker-pod-ordinal> -svc
형식으로 되어 있습니다. 예를 들어 my-broker-deployment-wconsj-0-svc
. 자동으로 생성된 경로의 기본 이름은 < custom-resource-name> -wconsj- <broker-pod-ordinal> -svc-rte
형식으로 되어 있습니다. 예를 들어 my-broker-deployment-wconsj-0-svc-rte
.
다음 절차에서는 실행 중인 브로커 Pod의 콘솔에 액세스하는 방법을 보여줍니다.
프로세스
OpenShift Container Platform 웹 콘솔에서
.경로 페이지에서 지정된 브로커 Pod의
wconsj
경로를 식별합니다. 예를 들어my-broker-deployment-wconsj-0-svc-rte
.Location 에서 경로에 해당하는 링크를 클릭합니다.
웹 브라우저에서 새 탭이 열립니다.
관리 콘솔 링크를 클릭합니다.
AMQ Management 콘솔 로그인 페이지가 열립니다.
참고인증 정보는 CR의
requireLogin
속성이true
로 설정된 경우에만 AMQ Management Console에 로그인해야 합니다. 이 속성은 브로커 및 AMQ 관리 콘솔에 로그인하는 데 로그인 인증 정보가 필요한지 여부를 지정합니다. 기본적으로requireLogin
속성은false
로 설정됩니다.requireLogin
이false
로 설정된 경우 사용자 이름과 암호를 입력하라는 메시지가 표시되면 텍스트를 입력하여 유효한 사용자 이름과 암호를 제공하지 않고 AMQ Management Console에 로그인할 수 있습니다.requireLogin
속성이true
로 설정된 경우 사용자 이름과 암호를 입력합니다.브로커 및 AMQ 관리 콘솔에 연결하는 데 사용할 수 있는 사전 구성된 사용자의 인증 정보를 입력할 수 있습니다. 이러한 속성이 CR(사용자 정의 리소스) 인스턴스에 구성된 경우
adminUser
및adminPassword
속성에서 이러한 인증 정보를 찾을 수 있습니다. 이러한 속성은 CR에 구성되지 않고 Operator에서 인증 정보를 자동으로 생성합니다. 자동으로 생성된 인증 정보를 얻으려면 5.2절. “AMQ 관리 콘솔 로그인 인증 정보에 액세스” 를 참조하십시오.다른 사용자로 로그인하려면 AMQ Management Console에 로그인하는 데 필요한 권한을 가지려면 사용자가
hawtio.role
시스템 속성에 지정된 보안 역할에 속해야 합니다.hawtio.role
시스템 속성의 기본 역할은 사전 구성된 사용자가 속하는admin
입니다.
5.2. AMQ 관리 콘솔 로그인 인증 정보에 액세스
브로커 배포에 사용된 사용자 정의 리소스(CR) 인스턴스에 adminUser
및 adminPassword
값을 지정하지 않으면 Operator에서 이러한 인증 정보를 자동으로 생성하여 시크릿에 저장합니다. 기본 시크릿 이름은 < custom-resource-name> -credentials-secret
형식으로 되어 있습니다(예: my-broker-deployment-credentials-secret
).
adminUser
및 adminPassword
의 값은 CR의 requireLogin
매개변수가 true
로 설정된 경우에만 관리 콘솔에 로그인해야 합니다.
requireLogin
이 false
로 설정된 경우 사용자 이름과 암호를 입력하라는 메시지가 표시되면 텍스트를 입력하여 유효한 사용자 이름 암호를 제공하지 않고 콘솔에 로그인할 수 있습니다.
다음 절차에서는 로그인 자격 증명에 액세스하는 방법을 보여줍니다.
프로세스
OpenShift 프로젝트의 전체 시크릿 목록을 참조하십시오.
- OpenShift Container Platform 웹 콘솔에서 클릭합니다.
명령줄에서 다음을 수행합니다.
$ oc get secrets
적절한 시크릿을 열어 Base64로 인코딩된 콘솔 로그인 인증 정보를 표시합니다.
- OpenShift Container Platform 웹 콘솔에서 이름에 브로커 사용자 정의 리소스 인스턴스가 포함된 시크릿을 클릭합니다. YAML 탭을 클릭합니다.
명령줄에서 다음을 수행합니다.
$ oc edit secret <my-broker-deployment-credentials-secret>
시크릿에서 값을 디코딩하려면 다음과 같은 명령을 사용합니다.
$ echo 'dXNlcl9uYW1l' | base64 --decode console_admin
추가 리소스
- AMQ Management Console을 사용하여 브로커를 보고 관리하는 방법에 대한 자세한 내용은 AMQ Broker 관리에서 AMQ 관리 콘솔을 사용하여 브로커 관리를 참조하십시오.
6장. Operator 기반 브로커 배포 업그레이드
Operator 기반 브로커 배포를 업그레이드하려면 Operator 및 브로커 컨테이너 이미지를 업그레이드해야 합니다.
6.1. 사전 준비 사항
이 섹션에서는 Operator 기반 브로커 배포를 위해 Operator 및 브로커 컨테이너 이미지를 업그레이드하기 전에 몇 가지 중요한 고려 사항에 대해 설명합니다.
Operator 업그레이드부터 Operator와 브로커 이미지를 두 단계로 업그레이드하여 업그레이드가 원활하게 실행되도록 합니다.
Operator 업그레이드에서 브로커 이미지의 업그레이드를 분리하려면 업그레이드된 Operator가 브로커 컨테이너 이미지를 새 Operator에서 지원하는 최신 버전으로 자동으로 업그레이드하지 못하도록 해야 합니다. CR에서
version
속성을 설정하여 이 자동 업그레이드를 방지할 수 있습니다. 예를 들어version
속성 값을 현재 배포된 브로커 이미지의 버전으로 설정할 수 있으며 CR의status
섹션에 표시됩니다. 자세한 내용은 6.6.1절. “버전 번호를 사용하여 이미지 자동 업그레이드 제한”의 내용을 참조하십시오.- OpenShift CLI(명령줄 인터페이스) 또는 OperatorHub를 사용하여 Operator를 업그레이드하려면 OpenShift 클러스터에 대한 클러스터 관리자 권한이 필요합니다.
원래 CLI를 사용하여 Operator 를 설치한 경우 CLI를 사용하여 Operator를 업그레이드해야 합니다. 원래 OperatorHub를 사용하여 Operator를 에 표시되는 경우 OperatorHub를 사용하여 Operator를 업그레이드해야 합니다. 이러한 업그레이드 방법에 대한 자세한 내용은 다음을 참조하십시오.
redeliveryDelayMultiplier
및redeliveryCollisionAvoidanceFactor
속성이 7.8.x 또는 7.9.x 배포의 기본 브로커 CR에 구성된 경우 새 Operator는 7.10.x 이상으로 업그레이드한 후 CR을 조정할 수 없습니다. 두 속성의 데이터 유형이 7.10.x의 float에서 문자열로 변경되어 조정이 실패합니다.spec.deploymentPlan.addressSettings.addressSetting
속성에서redeliveryDelayMultiplier
및redeliveryCollisionAvoidanceFactor
속성을 삭제하여 이 문제를 해결할 수 있습니다. 그런 다음brokerProperties
속성 아래에 속성을 구성합니다. 예를 들면 다음과 같습니다.spec: ... brokerProperties: - "addressSettings.#.redeliveryMultiplier=2.1" - "addressSettings.#.redeliveryCollisionAvoidanceFactor=1.2"
참고brokerProperties
속성에서 삭제한redeliveryDelayMultiplier
속성 이름 대신redeliveryMultiplier
속성 이름을 사용합니다.
6.2. 자동 Operator 업그레이드
OperatorHub를 사용하여 Operator를 설치하고 Install Operator 페이지에서 Update Approval 옵션에 대해 자동으로 기본값을 사용한 경우 OperatorHub는 현재 Operator와 동일한 마이크로 버전이 있는 각 새 버전으로 Operator를 자동으로 업그레이드합니다. 예를 들어 현재 Operator 버전이 7.11.6인 경우 OperatorHub는 Operator를 버전 7.11.7로 자동으로 업그레이드합니다.
마이너 Operator 버전 간 자동 업그레이드는 지원되지 않습니다. 예를 들어 현재 Operator가 버전 7.11.7인 경우 버전 7.12.x로 자동 업그레이드할 수 없습니다. Operator의 마이너 버전 간에 업그레이드하려면 현재 Operator를 수동으로 제거하고 해당 마이너 버전의 Operator를 사용할 수 있는 채널에서 새 Operator를 설치해야 합니다. OperatorHub 또는 OpenShift CLI(명령줄 인터페이스)를 사용하여 Operator의 마이너 버전 간에 수동으로 업그레이드할 수 있습니다.
Operator를 설치 제거해도 제거 절차 중에 이 Operator의 모든 피연산자 인스턴스 삭제 확인란을 선택하지 않는 경우 Operator에서 관리하는 브로커에는 영향을 미치지 않습니다. 자세한 내용은 6.3.2절. “Operator 업그레이드”의 내용을 참조하십시오.
6.3. OperatorHub를 사용하여 Operator 수동 업그레이드
OperatorHub를 사용하여 Operator를 설치하기 위해 원래 OperatorHub를 사용한 경우에만 OperatorHub를 업그레이드합니다(즉, OpenShift Container Platform 웹 콘솔의 프로젝트에 대한 에 Operator가 나타납니다). 원래 OpenShift CLI(명령줄 인터페이스)를 사용하여 Operator를 설치한 경우 CLI를 사용하여 Operator를 업그레이드합니다. CLI를 사용하여 Operator를 업그레이드하는 방법을 알아보려면 6.4절. “CLI를 사용하여 Operator 수동 업그레이드” 을 참조하십시오.
7.10.0 또는 7.10.1에서 업그레이드하는 경우 이러한 버전의 Operator 업그레이드를 완료하는 방법을 설명하는 특정 섹션을 참조하십시오.
6.3.1. 사전 준비 사항
이 섹션에서는 OperatorHub를 사용하여 AMQ Broker Operator의 인스턴스를 업그레이드하기 전에 몇 가지 중요한 고려 사항에 대해 설명합니다.
- OperatorHub에서 최신 Operator 버전을 설치할 때 Operator Lifecycle Manager가 OpenShift 클러스터의 CRD를 자동으로 업데이트합니다. 기존 CRD를 제거하지 않아야 합니다. 기존 CRD를 제거하면 모든 CR 및 브로커 인스턴스도 제거됩니다.
- 최신 Operator 버전에 대한 CRD로 클러스터를 업데이트하면 이 업데이트가 클러스터의 모든 프로젝트에 영향을 미칩니다. 이전 버전의 Operator에서 배포한 브로커 Pod는 OpenShift Container Platform 웹 콘솔에서 상태를 업데이트할 수 없게 될 수 있습니다. 실행 중인 브로커 Pod의 로그 탭을 클릭하면 'UpdatepodStatus'가 실패했음을 나타내는 메시지가 표시됩니다. 그러나 해당 프로젝트의 브로커 Pod 및 Operator는 예상대로 계속 작동합니다. 영향을 받는 프로젝트의 이 문제를 해결하려면 최신 버전의 Operator를 사용하도록 해당 프로젝트를 업그레이드해야 합니다.
7.10.0 또는 7.10.1에서 업그레이드하는 경우 이러한 버전의 Operator 업그레이드를 완료하는 방법을 설명하는 특정 섹션을 참조하십시오. 이러한 버전을 업그레이드하려면 Operator 업그레이드가 배포에서 브로커 Pod를 다시 시작하지 못하도록 하는 추가 단계가 필요합니다.
6.3.2. Operator 업그레이드
업그레이드를 완료하려면 현재 Operator를 설치 제거하고 새 Operator를 설치해야 합니다.
프로세스
- OpenShift Container Platform 웹 콘솔에 클러스터 관리자로 로그인합니다.
- 프로젝트에서 기존 AMQ Broker Operator를 설치 제거합니다.
- 왼쪽 탐색 메뉴에서 → 를 클릭합니다.
- 페이지 상단에 있는 프로젝트 드롭다운 메뉴에서 Operator를 제거할 프로젝트를 선택합니다.
- 설치하려는 Red Hat Integration - AMQ Broker 인스턴스를 찾습니다.
Operator 인스턴스의 경우 오른쪽에서 더 많은 옵션 아이콘(세 개의 수직 점)을 클릭합니다. Operator 설치 제거를 선택합니다.
주의이 Operator의 모든 피연산자 인스턴스 삭제 확인란이 선택 되지 않았는지 확인합니다. 이 확인란이 선택되면 Operator가 관리하는 브로커 인스턴스가 Operator가 제거될 때 삭제됩니다.
- 확인 대화 상자에서 설치 제거를 클릭합니다.
- OperatorHub를 사용하여 AMQ Broker 7.12용 Operator의 최신 버전을 설치합니다. 자세한 내용은 3.3.2절. “OperatorHub에서 Operator 배포”의 내용을 참조하십시오.
- 왼쪽 탐색 메뉴에서 → 를 클릭합니다.
- 설치된 Red Hat Integration - AMQ Broker 인스턴스에 올바른 버전 번호가 표시되는지 확인합니다.
6.3.3. 7.10.0에서 Operator 업그레이드
7.10.0 Operator를 설치 제거하고 업그레이드를 완료하려면 새 Operator를 설치해야 합니다. 이 프로세스에는 새 Operator가 배포에서 브로커 Pod를 다시 시작하지 못하도록 하는 추가 단계가 포함되어 있으므로 중단이 발생합니다.
프로세스
- OpenShift Container Platform 웹 콘솔에 클러스터 관리자로 로그인합니다.
프로젝트에서 기존 AMQ Broker Operator를 설치 제거합니다.
- 왼쪽 탐색 메뉴에서 → 를 클릭합니다.
- 페이지 상단에 있는 프로젝트 드롭다운 메뉴에서 Operator를 제거할 프로젝트를 선택합니다.
- 설치하려는 Red Hat Integration - AMQ Broker 인스턴스를 찾습니다.
- Operator 인스턴스의 경우 오른쪽에서 더 많은 옵션 아이콘(세 개의 수직 점)을 클릭합니다. Operator 설치 제거를 선택합니다.
- 확인 대화 상자에서 설치 제거를 클릭합니다.
7.10.0 Operator를 업그레이드하면 새 Operator가 StatefulSet을 삭제하여 사용자 정의 및 Operator 미터링 라벨을 제거합니다. 이 레이블은 7.10.0에서 Operator에 의해 StatefulSet 선택기에 잘못 추가되었습니다. Operator가 StatefulSet을 삭제하면 기존 브로커 Pod도 삭제되어 임시 브로커가 중단됩니다. 중단을 방지하려면 다음 단계를 완료하여 StatefulSet을 삭제하고 브로커 Pod를 분리하여 계속 실행합니다.
기존 Operator 배포가 포함된 프로젝트의 관리자로 OpenShift Container Platform CLI에 로그인합니다.
$ oc login -u <user>
Operator 버전을 업그레이드하려는 OpenShift 프로젝트로 전환합니다.
$ oc project <project-name>
--cascade=orphan
옵션을 사용하여 StatefulSet을 삭제하여 브로커 Pod를 분리합니다. 분리된 브로커 Pod는 StatefulSet이 삭제된 후에도 계속 실행됩니다.$ oc delete statefulset <statefulset-name> --cascade=orphan
기본 브로커 CR에
deploymentPlan.labels
속성에application
또는ActiveMQArtemis
라는 레이블이 있는지 확인합니다.7.10.0에서는 CR에 이러한 사용자 지정 레이블을 구성할 수 있었습니다. 이러한 라벨은 Operator가 Pod에 라벨을 할당하도록 예약되어 있으며 7.10.0 후에는 사용자 정의 라벨로 추가할 수 없습니다. 이러한 사용자 정의 레이블이 7.10.0의 기본 브로커 CR에 구성된 경우 Pod의 Operator가 사용자 정의 라벨을 덮어씁니다. CR에 이러한 라벨 중 하나가 있는 경우 다음 단계를 완료하여 Pod에서 올바른 라벨을 복원하고 CR에서 라벨을 제거합니다.
OpenShift CLI(명령줄 인터페이스)에서 다음 명령을 실행하여 올바른 Pod 레이블을 복원합니다. 다음 예에서 'ex-aao'는 배포된 StatefulSet의 이름입니다.
$ for pod in $(oc get pods | grep -o '^ex-aao[^ ]*'); do oc label --overwrite pods $pod ActiveMQArtemis=ex-aao application=ex-aao-app; done
CR의
deploymentPlan.labels
속성에서애플리케이션
및ActiveMQArtemis
레이블을 삭제합니다.OpenShift 명령줄 인터페이스 사용:
브로커 배포를 위해 프로젝트에 CR을 배포할 수 있는 권한이 있는 사용자로 OpenShift에 로그인합니다.
oc login -u <user> -p <password> --server=<host:port>
배포에 사용할 CR을 편집합니다.
oc edit ActiveMQArtemis <statefulset name> -n <namespace>
-
CR의
deploymentPlan.labels
요소에서application
또는ActiveMQArtemis
라는 사용자 지정 레이블을 삭제합니다. - CR을 저장합니다.
OpenShift Container Platform 웹 콘솔 사용:
- 브로커 배포를 위해 프로젝트에 CR을 배포할 권한이 있는 사용자로 콘솔에 로그인합니다.
- 왼쪽 창에서 → 를 클릭합니다.
- ActiveMQArtemis CRD를 클릭합니다.
- Instances 탭을 클릭합니다.
- 브로커 배포에 사용할 인스턴스를 클릭합니다.
YAML 탭을 클릭합니다.
콘솔에서 YAML 편집기가 열리고 CR 인스턴스를 구성할 수 있습니다.
-
CR의
deploymentPlan.labels
요소에서application
또는ActiveMQArtemis
라는 사용자 지정 레이블을 삭제합니다. - 저장을 클릭합니다.
OperatorHub를 사용하여 AMQ Broker 7.12용 Operator의 최신 버전을 설치합니다. 자세한 내용은 3.3.2절. “OperatorHub에서 Operator 배포”의 내용을 참조하십시오.
새 Operator는 이전 브로커 배포를 인식하고 관리할 수 있습니다. CR의
image
또는version
필드에 값을 설정하면 Operator 조정 프로세스에서 Operator가 시작될 때 브로커 Pod를 해당 이미지로 업그레이드합니다. 자세한 내용은 6.6절. “브로커 컨테이너 이미지의 자동 업그레이드 제한”의 내용을 참조하십시오. 그러지 않으면 Operator가 각 브로커 Pod를 최신 컨테이너 이미지로 업그레이드합니다.참고조정 프로세스가 시작되지 않으면 배포를 스케일링하여 프로세스를 시작할 수 있습니다. 자세한 내용은 3.4.1절. “기본 브로커 인스턴스 배포”의 내용을 참조하십시오.
- 필요에 따라 업그레이드된 브로커에서 사용할 수 있는 새로운 기능의 CR에 속성을 추가합니다.
6.3.4. 7.10.1에서 Operator 업그레이드
업그레이드를 완료하려면 7.10.1 Operator를 설치 제거하고 새 Operator를 설치해야 합니다. 이 프로세스에는 구성에 따라 새 Operator가 브로커 Pod를 재시작하지 못하도록 완료해야 하는 추가 단계가 포함되어 있으므로 중단이 발생합니다.
프로세스
- OpenShift Container Platform 웹 콘솔에 클러스터 관리자로 로그인합니다.
기본 브로커 CR에
deploymentPlan.labels
속성에application
또는ActiveMQArtemis
라는 레이블이 있는지 확인합니다.이러한 라벨은 Operator가 Pod에 라벨을 할당하도록 예약되며 7.10.1 후에는 사용할 수 없습니다. 이러한 사용자 정의 레이블이 기본 브로커 CR에 구성된 경우 Pod의 Operator가 사용자 정의 라벨을 덮어씁니다.
- 이러한 사용자 정의 레이블이 기본 브로커 CR에 구성되지 않은 경우 OperatorHub를 사용하여 AMQ Broker 7.12용 Operator의 최신 버전을 설치합니다. 자세한 내용은 3.3.2절. “OperatorHub에서 Operator 배포”의 내용을 참조하십시오.
이러한 사용자 정의 라벨 중 하나가 기본 브로커 CR에 구성된 경우 새 Operator를 설치하기 전에 기존 Operator를 제거하려면 다음 단계를 완료하고 올바른 Pod 레이블을 복원하고 CR에서 라벨을 제거합니다.
참고Operator를 설치 제거하면 Operator가 StatefulSet을 삭제하지 않고 사용자 정의 라벨을 제거하여 기존 브로커 Pod도 삭제하여 임시 브로커가 중단될 수 있습니다.
프로젝트에서 기존 AMQ Broker Operator를 설치 제거합니다.
- 왼쪽 탐색 메뉴에서 → 를 클릭합니다.
- 페이지 상단에 있는 프로젝트 드롭다운 메뉴에서 Operator를 제거할 프로젝트를 선택합니다.
- 설치하려는 Red Hat Integration - AMQ Broker 인스턴스를 찾습니다.
- Operator 인스턴스의 경우 오른쪽에서 더 많은 옵션 아이콘(세 개의 수직 점)을 클릭합니다. Operator 설치 제거를 선택합니다.
- 확인 대화 상자에서 설치 제거를 클릭합니다.
OpenShift CLI(명령줄 인터페이스)에서 다음 명령을 실행하여 올바른 Pod 레이블을 복원합니다. 다음 예에서 'ex-aao'는 배포된 StatefulSet의 이름입니다.
$ for pod in $(oc get pods | grep -o '^ex-aao[^ ]*'); do oc label --overwrite pods $pod ActiveMQArtemis=ex-aao application=ex-aao-app; done
CR의
deploymentPlan.labels
속성에서애플리케이션
및ActiveMQArtemis
레이블을 삭제합니다.OpenShift 명령줄 인터페이스 사용:
브로커 배포를 위해 프로젝트에 CR을 배포할 수 있는 권한이 있는 사용자로 OpenShift에 로그인합니다.
oc login -u <user> -p <password> --server=<host:port>
배포에 사용할 CR을 편집합니다.
oc edit ActiveMQArtemis <statefulset name> -n <namespace>
-
CR의
deploymentPlan.labels
속성에서application
또는ActiveMQArtemis
라는 사용자 지정 레이블을 삭제합니다. - CR 파일을 저장합니다.
OpenShift Container Platform 웹 콘솔 사용:
- 브로커 배포를 위해 프로젝트에 CR을 배포할 권한이 있는 사용자로 콘솔에 로그인합니다.
- 왼쪽 창에서 → 를 클릭합니다.
- ActiveMQArtemis CRD를 클릭합니다.
- Instances 탭을 클릭합니다.
- 브로커 배포에 사용할 인스턴스를 클릭합니다.
YAML 탭을 클릭합니다.
콘솔에서 YAML 편집기가 열리고 CR 인스턴스를 구성할 수 있습니다.
-
CR의
deploymentPlan.labels
속성에서application
또는ActiveMQArtemis
라는 사용자 지정 레이블을 삭제합니다. - 저장을 클릭합니다.
OperatorHub를 사용하여 AMQ Broker 7.12용 Operator의 최신 버전을 설치합니다. 자세한 내용은 3.3.2절. “OperatorHub에서 Operator 배포”의 내용을 참조하십시오.
새 Operator는 이전 브로커 배포를 인식하고 관리할 수 있습니다. CR의
image
또는version
필드에 값을 설정하면 Operator 조정 프로세스에서 Operator가 시작될 때 브로커 Pod를 해당 이미지로 업그레이드합니다. 자세한 내용은 6.6절. “브로커 컨테이너 이미지의 자동 업그레이드 제한”의 내용을 참조하십시오. 그러지 않으면 Operator가 각 브로커 Pod를 최신 컨테이너 이미지로 업그레이드합니다.참고조정 프로세스가 시작되지 않으면 배포를 스케일링하여 프로세스를 시작할 수 있습니다. 자세한 내용은 3.4.1절. “기본 브로커 인스턴스 배포”의 내용을 참조하십시오.
- 필요에 따라 업그레이드된 브로커에서 사용할 수 있는 새로운 기능의 CR에 속성을 추가합니다.
6.4. CLI를 사용하여 Operator 수동 업그레이드
이 섹션의 절차에서는 OpenShift CLI(명령줄 인터페이스)를 사용하여 Operator의 다른 버전을 AMQ Broker 7.12에 사용할 수 있는 최신 버전으로 업그레이드하는 방법을 보여줍니다.
6.4.1. 사전 요구 사항
- CLI를 사용하여 Operator를 처음 설치한 경우에만 Operator를 업그레이드합니다. 원래 OperatorHub를 사용하여 Operator를 설치된 Operator에 표시됨) OperatorHub를 사용하여 Operator를 업그레이드합니다. OperatorHub를 사용하여 Operator를 업그레이드하는 방법을 알아보려면 6.3절. “OperatorHub를 사용하여 Operator 수동 업그레이드” 을 참조하십시오.
6.4.2. CLI를 사용하여 Operator 업그레이드
OpenShift CLI(명령줄 인터페이스)를 사용하여 Operator를 AMQ Broker 7.12의 최신 버전으로 업그레이드할 수 있습니다.
프로세스
- 웹 브라우저에서 AMQ Broker 7.12.3 의 소프트웨어 다운로드 페이지로 이동합니다.
-
버전 드롭다운 목록의 값이
7.12.3
으로 설정되고 릴리스 탭이 선택되어 있는지 확인합니다. AMQ Broker 7.12.3 Operator 설치 및 예제 파일 옆에 있는 Download 를 클릭합니다.
amq-broker-operator-7.12.3-ocp-install-examples-rhel8.zip
압축 아카이브가 자동으로 시작됩니다.다운로드가 완료되면 아카이브를 선택한 설치 디렉터리로 이동합니다. 다음 예제에서는 아카이브를
~/broker/operator
라는 디렉터리로 이동합니다.$ mkdir ~/broker/operator $ mv amq-broker-operator-7.12.3-ocp-install-examples-rhel8.zip ~/broker/operator
선택한 설치 디렉터리에서 아카이브의 내용을 추출합니다. 예를 들면 다음과 같습니다.
$ cd ~/broker/operator $ unzip amq-broker-operator-operator-7.12.3-ocp-install-examples-rhel8.zip
기존 Operator 배포가 포함된 프로젝트의 관리자로 OpenShift Container Platform에 로그인합니다.
$ oc login -u <user>
Operator 버전을 업그레이드하려는 OpenShift 프로젝트로 전환합니다.
$ oc project <project-name>
다운로드 및 추출한 최신 Operator 아카이브의
배포
디렉터리에서operator.yaml
파일을 엽니다.참고operator.yaml
파일에서 Operator는 SHA( Secure Hash Algorithm ) 값으로 표시되는 이미지를 사용합니다. 숫자 기호(#
) 기호로 시작하는 주석 행은 SHA 값이 특정 컨테이너 이미지 태그에 해당함을 나타냅니다.-
이전 Operator 배포를 위해
operator.yaml
파일을 엽니다. 이전 구성에서 지정한 기본값이 아닌 모든 값이 새operator.yaml
구성 파일에 복제되었는지 확인합니다. 새
operator.yaml
파일에서 Operator의 이름은 기본적으로amq-broker-controller-manager
입니다. 이전 배포의 Operator 이름이amq-broker-controller-manager
가 아닌 경우amq-broker-controller-manager
의 모든 인스턴스를 이전 Operator 이름으로 교체합니다. 예를 들면 다음과 같습니다.spec: ... selector matchLabels name: amq-broker-operator ...
새
operator.yaml
파일에서 Operator의 서비스 계정 이름은amq-broker-controller-manager
입니다. 이전 버전에서는 Operator의 서비스 계정 이름은amq-broker-operator
였습니다.이전 배포에서 서비스 계정 이름을 사용하려면 새
operator.yaml
파일의 서비스 계정 이름을 이전 배포에서 사용된 이름으로 교체합니다. 예를 들면 다음과 같습니다.spec: ... serviceAccountName: amq-broker-operator ...
새 서비스 계정 이름,
amq-broker-controller-manager
를 Operator에 사용하려면 프로젝트에서 서비스 계정, 역할 및 역할 바인딩을 업데이트합니다.$ oc apply -f deploy/service_account.yaml
$ oc apply -f deploy/role.yaml
$ oc apply -f deploy/role_binding.yaml
Operator에 포함된 CRD를 업데이트합니다.
기본 브로커 CRD를 업데이트합니다.
$ oc apply -f deploy/crds/broker_activemqartemis_crd.yaml
주소 CRD를 업데이트합니다.
$ oc apply -f deploy/crds/broker_activemqartemisaddress_crd.yaml
scaledown 컨트롤러 CRD를 업데이트합니다.
$ oc apply -f deploy/crds/broker_activemqartemisscaledown_crd.yaml
보안 CRD를 업데이트합니다.
$ oc apply -f deploy/crds/broker_activemqartemissecurity_crd.yaml
AMQ Broker Operator 7.10.0에서만 업그레이드하는 경우 Operator 및 StatefulSet을 삭제합니다.
기본적으로 새 Operator는 StatefulSet을 삭제하여 사용자 정의 및 Operator 미터링 레이블을 제거합니다. 이 레이블은 7.10.0의 Operator에서 StatefulSet 선택기에 잘못 추가되었습니다. Operator가 StatefulSet을 삭제하면 기존 브로커 Pod도 삭제되어 임시 브로커가 중단됩니다. 중단을 방지하려면 브로커 Pod를 삭제하지 않고 Operator 및 StatefulSet을 삭제하려면 다음 단계를 완료합니다.
Operator를 삭제합니다.
$ oc delete -f deploy/operator.yaml
참고Operator를 삭제해도 Operator에서 관리하는 브로커 인스턴스는 제거되지 않습니다.
--cascade=orphan
옵션을 사용하여 StatefulSet을 삭제하여 브로커 Pod를 분리합니다. 분리된 브로커 Pod는 StatefulSet이 삭제된 후에도 계속 실행됩니다.$ oc delete statefulset <statefulset-name> --cascade=orphan
AMQ Broker Operator 7.10.0 또는 7.10.1에서 업그레이드하는 경우 기본 브로커 CR에
deploymentPlan.labels
속성에 구성된애플리케이션
또는ActiveMQArtemis
라는 레이블이 있는지 확인합니다.이러한 라벨은 Operator가 Pod에 라벨을 할당하도록 예약되며 7.10.1 이후 사용자 정의 라벨로 허용되지 않습니다. 이러한 사용자 정의 레이블이 기본 브로커 CR에 구성된 경우 Pod의 Operator가 사용자 정의 라벨을 덮어씁니다. 이러한 사용자 정의 라벨 중 하나가 기본 브로커 CR에 구성된 경우 다음 단계를 완료하여 Pod에서 올바른 라벨을 복원하고 CR에서 라벨을 제거합니다.
7.10.0에서 업그레이드하는 경우 이전 단계에서 Operator를 삭제했습니다. 7.10.1에서 업그레이드하는 경우 Operator를 삭제합니다.
$ oc delete -f deploy/operator.yaml
다음 명령을 실행하여 올바른 Pod 레이블을 복원합니다. 다음 예에서 'ex-aao'는 배포된 StatefulSet의 이름입니다.
$ for pod in $(oc get pods | grep -o '^ex-aao[^ ]*'); do oc label --overwrite pods $pod ActiveMQArtemis=ex-aao application=ex-aao-app; done
CR의
deploymentPlan.labels
속성에서애플리케이션
및ActiveMQArtemis
레이블을 삭제합니다.브로커 배포를 위해 프로젝트에 CR을 배포할 수 있는 권한이 있는 사용자로 OpenShift에 로그인합니다.
oc login -u <user> -p <password> --server=<host:port>
-
다운로드 및 추출한 Operator 설치 아카이브의
deploy/crs
디렉터리에 포함된broker_activemqartemis_cr.yaml
이라는 샘플 CR 파일을 엽니다. -
CR의
deploymentPlan.labels
속성에서application
또는ActiveMQArtemis
라는 사용자 지정 레이블을 삭제합니다. - CR 파일을 저장합니다.
CR 인스턴스를 배포합니다.
브로커 배포를 위해 프로젝트로 전환합니다.
$ oc project <project_name>
CR을 적용합니다.
$ oc apply -f <path/to/broker_custom_resource_instance>.yaml
이전 Operator를 삭제한 경우 새 Operator를 배포합니다.
$ oc create -f deploy/operator.yaml
업데이트된 Operator 구성을 적용합니다.
$ oc apply -f deploy/operator.yaml
- 필요에 따라 업그레이드된 브로커에서 사용할 수 있는 새로운 기능의 CR에 속성을 추가합니다.
6.5. 브로커 컨테이너 이미지 업그레이드
Operator가 업그레이드되면 여러 버전의 AMQ Broker를 관리할 수 있습니다. 새 Operator에서 지원하는 버전 목록은 Operator 로그에서 확인할 수 있습니다. 예를 들면 다음과 같습니다.
operator의 INFO 설정 버전: 7.12.1.OPR.1 2024-08-14T15:04:17 INFO 설정 Supported ActiveMQArtemis Kubernetes 이미지 버전: 7.11.0 7.11.1 7.11.1 7.11.4 7.11.5 7.11.6 7.11.7 7.12.0 7.12.1
권장되는 경우 새 Operator가 Operator 업그레이드와 동시에 브로커 이미지를 자동으로 업그레이드하지 못하도록 사용자 정의 리소스에 version
속성을 구성한 경우 브로커 이미지를 업그레이드하도록 버전 번호를 변경할 수 있습니다. 자세한 내용은 6.6절. “브로커 컨테이너 이미지의 자동 업그레이드 제한”의 내용을 참조하십시오.
version
속성이 사용자 정의 리소스에 구성되지 않은 경우 Operator는 관리하는 각 브로커를 Operator가 지원하는 브로커 컨테이너 이미지의 최신 버전으로 자동으로 업그레이드합니다. 7.12.3 Operator의 경우 지원되는 브로커 컨테이너 이미지의 최신 버전은 7.12.3입니다.
6.6. 브로커 컨테이너 이미지의 자동 업그레이드 제한
기본적으로 Operator는 관리하는 각 브로커를 Operator 버전에서 지원하는 사용 가능한 최신 컨테이너 이미지로 자동 업그레이드합니다. 배포의 CR(사용자 정의 리소스)에서는 버전 번호 또는 특정 컨테이너 이미지의 URL을 지정하여 Operator에서 이미지를 업그레이드하는 기능을 제한할 수 있습니다.
6.6.1. 버전 번호를 사용하여 이미지 자동 업그레이드 제한
새 버전을 사용할 수 있게 되면 브로커가 자동으로 업그레이드되는 컨테이너 이미지의 버전을 제한할 수 있습니다.
버전 번호를 기반으로 업그레이드를 제한하면 Operator가 배포된 버전에 대한 보안 수정 사항이 포함된 새 이미지를 사용하도록 브로커를 자동으로 업그레이드합니다.
프로세스
브로커 배포의 기본 브로커 CR 인스턴스를 편집합니다.
OpenShift 명령줄 인터페이스 사용:
브로커 배포를 위해 프로젝트에서 CR을 편집하고 배포할 수 있는 권한이 있는 사용자로 OpenShift에 로그인합니다.
$ oc login -u <user> -p <password> --server=<host:port>
CR을 편집합니다.
oc edit ActiveMQArtemis <CR instance name> -n <namespace>
OpenShift Container Platform 웹 콘솔 사용:
- 브로커 배포를 위해 프로젝트에 CR을 배포할 권한이 있는 사용자로 콘솔에 로그인합니다.
- 왼쪽 창에서 → 를 클릭합니다.
- Red Hat Integration - AMQ Broker for RHEL 8 (Multiarch) Operator를 클릭합니다.
- AMQ Broker 탭을 클릭합니다.
- ActiveMQArtemis 인스턴스 이름의 이름을 클릭합니다.
YAML 탭을 클릭합니다.
콘솔에서 YAML 편집기가 열리고 CR 인스턴스를 편집할 수 있습니다.
참고CR의
status
섹션에서.status.version.brokerVersion
필드에 현재 배포된 AMQ Broker 버전이 표시됩니다.
spec.version
속성에서 Operator가 배포의 브로커 및 init 컨테이너 이미지를 업그레이드할 수 있는 버전을 지정합니다. 다음은 지정할 수 있는 값의 예입니다.- 예
다음 예에서 Operator는 배포의 현재 컨테이너 이미지를 7.12.0으로 업그레이드합니다.
spec: version: '7.12.0' ...
다음 예에서 Operator는 배포의 현재 컨테이너 이미지를 사용 가능한 최신 7.11.x 이미지로 업그레이드합니다. 예를 들어 배포에서 7.11.1 컨테이너 이미지를 사용하는 경우 Operator는 이미지를 7.11.6으로 자동 업그레이드하지만 7.12.3으로 업그레이드하지 않습니다.
spec: version: '7.11' ...
다음 예에서 Operator는 배포의 현재 컨테이너 이미지를 최신 7.x.x 이미지로 업그레이드합니다. 예를 들어 배포에서 7.11.6 이미지를 사용하는 경우 Operator는 이미지를 7.12.3으로 자동으로 업그레이드합니다.
spec: version: '7' ...
참고컨테이너 이미지의 마이너 버전(예: 7.11.x에서 7.12.x) 간에 업그레이드하려면 새 컨테이너 이미지와 동일한 마이너 버전이 있는 Operator가 필요합니다. 예를 들어 7.11.6에서 7.12.3으로 업그레이드하려면 7.12.x Operator를 설치해야 합니다.
- CR을 저장합니다.
CR에서 spec.version
속성을 사용하여 브로커 컨테이너 이미지의 자동 업그레이드를 제한하는 경우 CR에 spec.deploymentPlan.image
또는 spec.deploymentPlan.initImage
속성도 포함되어 있지 않아야 합니다. 이러한 두 속성은 모두 spec.version
속성을 재정의합니다. CR에 이러한 속성 중 하나와 spec.version
속성 중 하나가 있는 경우 배포된 브로커 및 init 이미지의 버전이 다를 수 있으므로 브로커가 실행되지 않을 수 있습니다.
CR을 저장하면 먼저 Operator가 기존 배포에 지정된 AMQ Broker 버전으로의 업그레이드를 사용할 수 있는지 확인합니다. 업그레이드할 잘못된 버전의 AMQ Broker(예: 아직 사용할 수 없는 버전)를 지정한 경우 Operator는 경고 메시지를 기록하고 추가 조치를 수행하지 않습니다.
그러나 지정된 버전으로 업그레이드할 수 있는 경우 Operator 는 배포의 각 브로커를 업그레이드하여 새 AMQ Broker 버전에 해당하는 브로커 컨테이너 이미지를 사용합니다.
Operator에서 사용하는 브로커 컨테이너 이미지는 Operator 배포의 operator.yaml
구성 파일의 환경 변수에 정의되어 있습니다. 환경 변수 이름에는 AMQ Broker 버전에 대한 식별자가 포함됩니다. 예를 들어 환경 변수 RELATED_IMAGE_ActiveMQ_Artemis_Broker_Kubernetes_7123
은 AMQ Broker 7.12.3에 해당합니다.
Operator가 CR 변경 사항을 적용하면 배포의 각 브로커 Pod를 재시작하여 각 Pod가 지정된 이미지 버전을 사용하도록 합니다. 배포에 여러 브로커가 있는 경우 한 번에 하나의 브로커 Pod만 종료하고 다시 시작합니다.
추가 리소스
- Operator에서 환경 변수를 사용하여 브로커 컨테이너 이미지를 선택하는 방법을 알아보려면 2.7절. “Operator에서 컨테이너 이미지를 선택하는 방법” 를 참조하십시오.
- 배포 상태를 보려면 다음을 참조하십시오. 2.8절. “CR(사용자 정의 리소스)의 이미지 및 버전 구성 검증”
6.6.2. 이미지 URL을 사용하여 이미지 자동 업그레이드 제한
특정 컨테이너 이미지를 사용하도록 배포의 브로커를 업그레이드하려면 CR에서 이미지의 레지스트리 URL을 지정할 수 있습니다. Operator가 브로커를 지정된 컨테이너 이미지로 업그레이드한 후 CR의 이미지 URL을 교체할 때까지 추가 업그레이드가 수행되지 않습니다. 예를 들어 Operator는 배포된 이미지에 대한 보안 수정 사항이 포함된 최신 이미지를 사용하도록 브로커를 자동으로 업그레이드하지 않습니다.
이미지 URL을 사용하여 자동 업그레이드를 제한하려면 CR의 spec.deploymentPlan.image
및 spec.deploymentPlan.initImage
속성에 대한 URL을 지정하여 브로커 및 init 컨테이너 이미지가 일치하는지 확인합니다. 하나의 컨테이너 이미지의 URL만 지정하면 브로커와 init 컨테이너 이미지가 달라질 수 있으므로 브로커가 실행되지 않을 수 있습니다.
CR에 spec.deploymentPlan.image
및 spec.deploymentPlan.initImage
속성 외에 spec.version
속성이 있는 경우 Operator는 spec.version
속성을 무시합니다.
프로세스
Operator에서 현재 이미지를 업그레이드할 수 있는 브로커 및 init 컨테이너 이미지의 URL을 가져옵니다.
- Red Hat Catalog에서 브로커 컨테이너 구성 요소 페이지: AMQ Broker for RHEL 8(Multiarch) 을 엽니다.
- 아키텍처 드롭다운 메뉴에서 아키텍처를 선택합니다.
- 태그 드롭다운에서 설치하려는 이미지에 해당하는 태그를 선택합니다. 태그는 릴리스 날짜를 기반으로 하는 시간순으로 표시됩니다. 태그는 릴리스 버전과 할당된 태그로 구성됩니다.
- 이 이미지 가져오기 탭을 엽니다.
- Manifest 필드에서 복사 아이콘을 클릭합니다.
- URL을 텍스트 파일에 붙여넣습니다.
- Red Hat Catalog에서 init 컨테이너 구성 요소 페이지를 엽니다. AMQ Broker Init for RHEL 8 (Multiarch)
- init 컨테이너 이미지의 URL을 가져오려면 다음 단계를 반복하여 브로커 컨테이너 이미지의 URL을 가져옵니다.
브로커 배포의 기본 브로커 CR 인스턴스를 편집합니다.
OpenShift 명령줄 인터페이스 사용:
브로커 배포를 위해 프로젝트에서 CR을 편집하고 배포할 수 있는 권한이 있는 사용자로 OpenShift에 로그인합니다.
$ oc login -u <user> -p <password> --server=<host:port>
CR을 편집합니다.
oc edit ActiveMQArtemis <CR instance name> -n <namespace>
OpenShift Container Platform 웹 콘솔 사용:
- 브로커 배포를 위해 프로젝트에 CR을 배포할 권한이 있는 사용자로 콘솔에 로그인합니다.
- 왼쪽 창에서 → 를 클릭합니다.
- Red Hat Integration - AMQ Broker for RHEL 8 (Multiarch) Operator를 클릭합니다.
- AMQ Broker 탭을 클릭합니다.
- ActiveMQArtemis 인스턴스 이름의 이름을 클릭합니다.
YAML 탭을 클릭합니다.
콘솔에서 CR 인스턴스를 구성할 수 있는 YAML 편집기가 열립니다.
텍스트 파일에 기록한 브로커 및 init 컨테이너 이미지의 URL을 복사하여 CR의
spec.deploymentPlan.image
및spec.deploymentPlan.initImage
필드에 삽입합니다. 예를 들면 다음과 같습니다.spec: ... deploymentPlan: image: registry.redhat.io/amq7/amq-broker-rhel8@55ae4e28b100534d63c34ab86f69230d274c999d46d1493f26fe3e75ba7a0cec initImage: registry.redhat.io/amq7/amq-broker-init-rhel8@442339c33549f2be9fe3b5c71184a753a3cf10b000b2ecc5bc9a062dd91c8def ...
CR을 저장합니다.
CR을 저장하면 Operator는 새 이미지를 사용하도록 브로커를 업그레이드하고
spec.deploymentPlan.image
및spec.deploymentPlan.initImage
속성 값을 다시 업데이트할 때까지 이러한 이미지를 사용합니다.향후 Operator 업그레이드가 배포에서 브로커를 다시 시작하지 못하도록 하려면 CR을 편집하고
spec.version
속성에 배포된 브로커의 버전 번호를 지정합니다.spec.version
속성이 CR에 구성되지 않은 경우 Operator의 후속 업그레이드로 브로커 Pod가 다시 시작됩니다.spec.version
속성에 버전 번호를 명시적으로 설정하지 않는 한 새 Operator에서 지원되는 최신 브로커 버전을 StatefulSet의 라벨에 추가하므로 Pod를 다시 시작해야 합니다.브로커를 시작한 후 CR의
status
섹션에서spec.version
속성에 지정할 버전 번호 값을 찾을 수 있습니다. 자세한 내용은 브로커 배포에 대한 상태 정보 보기를 참조하십시오.
이미지 URL을 설정하지 않고 AMQ Broker를 이미 배포한 경우 Operator가 배포된 현재 이미지를 업그레이드하지 못하도록 이미지 URL을 다시 설정할 수 있습니다. CR의 status
섹션에 있는 .status.version.image
및 .status.version.initImage
속성에 배포된 이미지의 레지스트리 URL을 찾을 수 있습니다.
.status.version.image
및 .status.version.initImage
속성에서 이미지 URL을 복사하여 spec.deploymentPlan.image
및 spec.deploymentPlan.initImage
속성에 각각 삽입하면 Operator는 현재 배포된 이미지를 업그레이드하지 않습니다.
추가 리소스
- 배포 상태를 보려면 2.8절. “CR(사용자 정의 리소스)의 이미지 및 버전 구성 검증” 을 참조하십시오.
7장. 브로커 모니터링
7.1. Fuse Console에서 브로커 보기
AMQ Management Console 대신 OpenShift에 Fuse Console을 사용하도록 Operator 기반 브로커 배포를 구성할 수 있습니다. 브로커 배포를 적절하게 구성한 경우 Fuse Console은 브로커를 검색하고 전용 Artemis
탭에 표시합니다. AMQ 관리 콘솔에서 수행하는 것과 동일한 브로커 런타임 데이터를 볼 수 있습니다. 주소 및 큐 생성과 같은 기본 관리 작업을 수행할 수도 있습니다.
다음 절차에서는 OpenShift의 Fuse Console이 배포에 브로커를 검색하고 표시할 수 있도록 브로커 배포에 대해 CR(사용자 정의 리소스) 인스턴스를 구성하는 방법을 설명합니다.
사전 요구 사항
- OpenShift용 Fuse Console은 OCP 클러스터 또는 해당 클러스터의 특정 네임스페이스에 배포해야 합니다. 콘솔을 특정 네임스페이스에 배포한 경우 콘솔에서 브로커를 검색할 수 있도록 브로커 배포가 동일한 네임스페이스에 있어야 합니다. 그렇지 않으면 Fuse Console 및 브로커가 동일한 OCP 클러스터에 배포하는 것으로 충분합니다. OCP에 Fuse Online을 설치하는 방법에 대한 자세한 내용은 OpenShift Container Platform에 Fuse Online 설치 및 설치를 참조하십시오.
- 브로커 배포가 이미 생성되어 있어야 합니다. 예를 들어 CR(사용자 정의 리소스) 인스턴스를 사용하여 기본 Operator 기반 배포를 생성하는 방법을 알아보려면 3.4.1절. “기본 브로커 인스턴스 배포” 를 참조하십시오.
프로세스
브로커 배포에 사용한 CR 인스턴스를 엽니다. 예를 들어 기본 배포의 CR은 다음과 유사할 수 있습니다.
apiVersion: broker.amq.io/v1beta1 kind: ActiveMQArtemis metadata: name: ex-aao spec: deploymentPlan: size: 4 image: registry.redhat.io/amq7/amq-broker-rhel8:7.12 ...
deploymentPlan
섹션에서jolokiaAgentEnabled
및managementRBACEnabled
속성을 추가하고 다음과 같이 값을 지정합니다.apiVersion: broker.amq.io/v1beta1 kind: ActiveMQArtemis metadata: name: ex-aao spec: deploymentPlan: size: 4 image: registry.redhat.io/amq7/amq-broker-rhel8:7.12 ... jolokiaAgentEnabled: true managementRBACEnabled: false
- jolokiaAgentEnabled
-
Fuse Console이 배포에서 브로커의 런타임 데이터를 검색하고 표시할 수 있는지 여부를 지정합니다. Fuse Console을 사용하려면 값을
true
로 설정합니다. - managementRBACEnabled
배포의 브로커에 RBAC(역할 기반 액세스 제어)가 활성화되어 있는지 여부를 지정합니다. Fuse Console에서 자체 역할 기반 액세스 제어를 사용하므로 Fuse Console을 사용하려면 값을
false
로 설정해야 합니다.중요Fuse Console을 사용하기 위해
managementRBACEnabled
의 값을false
로 설정하면 브로커의 management Cryostat가 더 이상 권한 부여가 필요하지 않습니다. AMQ 관리 콘솔을 사용해서는 안되며managementRBACEnabled
는 브로커의 모든 관리 작업이 무단 사용에 노출될 수 있으므로false
로 설정되어 있어야 합니다.
- CR 인스턴스를 저장합니다.
이전에 브로커 배포를 생성한 프로젝트로 전환합니다.
$ oc project <project_name>
명령줄에서 변경 사항을 적용합니다.
$ oc apply -f <path/to/custom_resource_instance>.yaml
- Fuse Console에서 Fuse 애플리케이션을 보려면 온라인 탭을 클릭합니다. 실행 중인 브로커를 보려면 왼쪽 탐색 메뉴에서 Artemis 를 클릭합니다.
추가 리소스
- OpenShift용 Fuse Console 사용에 대한 자세한 내용은 OpenShift에서 Red Hat Fuse 애플리케이션 모니터링 및 관리를 참조하십시오.
- Fuse Console에서와 동일한 방식으로 브로커를 보고 관리하는 방법에 대해 알아보려면 AMQ Management Console을 사용하여 브로커 관리를 참조하십시오.
7.2. Prometheus를 사용하여 브로커 런타임 지표 모니터링
다음 섹션에서는 OpenShift Container Platform에서 AMQ Broker에 대한 Prometheus 메트릭 플러그인을 구성하는 방법을 설명합니다. 플러그인을 사용하여 브로커 런타임 메트릭을 모니터링하고 저장할 수 있습니다. Grafana와 같은 그래픽 툴을 사용하여 Prometheus 플러그인이 수집하는 데이터의 고급 시각화 및 대시보드를 구성할 수도 있습니다.
Prometheus 지표 플러그인을 사용하면 Prometheus 형식으로 브로커 지표를 수집하고 내보낼 수 있습니다. 그러나 Red Hat 은 Prometheus 자체의 설치 또는 구성이나 Grafana와 같은 시각화 툴을 지원하지 않습니다. Prometheus 또는 Grafana의 설치, 구성 또는 실행에 대한 지원이 필요한 경우 커뮤니티 지원 및 문서와 같은 리소스의 제품 웹 사이트를 방문하십시오.
7.2.1. 메트릭 개요
브로커 인스턴스의 상태 및 성능을 모니터링하려면 AMQ Broker의 Prometheus 플러그인을 사용하여 브로커 런타임 지표를 모니터링하고 저장할 수 있습니다. AMQ Broker Prometheus 플러그인은 브로커 런타임 지표를 Prometheus 형식으로 내보내 Prometheus 자체를 사용하여 데이터에 대한 쿼리를 시각화하고 실행할 수 있습니다.
Grafana와 같은 그래픽 툴을 사용하여 Prometheus 플러그인이 수집하는 지표에 대한 고급 시각화 및 대시보드를 구성할 수도 있습니다.
플러그인에서 Prometheus 형식으로 내보내는 메트릭은 다음과 같습니다.
브로커 메트릭
artemis_address_memory_usage
- 메모리 내 메시지에 이 브로커의 모든 주소에서 사용하는 바이트 수입니다.
artemis_address_memory_usage_percentage
-
이 브로커의 모든 주소에서
global-max-size
매개변수의 백분율로 사용하는 메모리입니다. artemis_connection_count
- 이 브로커에 연결된 클라이언트 수입니다.
artemis_total_connection_count
- 시작된 이후 이 브로커에 연결된 클라이언트 수입니다.
주소 지표
artemis_routed_message_count
- 하나 이상의 큐 바인딩으로 라우팅되는 메시지 수입니다.
artemis_unrouted_message_count
- 큐 바인딩으로 라우팅 되지 않은 메시지 수입니다.
대기열 메트릭
artemis_consumer_count
- 지정된 대기열의 메시지를 사용하는 클라이언트 수입니다.
artemis_delivering_durable_message_count
- 지정된 큐가 현재 소비자에 전달 중인 메시지의 수입니다.
artemis_delivering_durable_persistent_size
- 지정된 큐가 현재 소비자에 전달 중인 영속적인 메시지 크기입니다.
artemis_delivering_message_count
- 지정된 대기열에서 현재 소비자에게 전달하는 메시지 수입니다.
artemis_delivering_persistent_size
- 지정된 대기열에서 현재 소비자에게 전달 중인 메시지의 영구 크기입니다.
artemis_durable_message_count
- 현재 지정된 큐에 있는 Cryostat 메시지 수입니다. 여기에는 예약, 페이지링 및 전송 중 메시지가 포함됩니다.
artemis_durable_persistent_size
- 현재 지정된 큐에 있는 Cryostat 메시지의 영구 크기입니다. 여기에는 예약, 페이지링 및 전송 중 메시지가 포함됩니다.
artemis_messages_acknowledged
- 큐가 생성된 이후 지정된 큐에서 확인된 메시지 수입니다.
artemis_messages_added
- 큐가 생성된 이후 지정된 큐에 추가된 메시지 수입니다.
artemis_message_count
- 현재 지정된 큐에 있는 메시지 수입니다. 여기에는 예약, 페이지링 및 전송 중 메시지가 포함됩니다.
artemis_messages_killed
- 큐가 생성된 이후 지정된 큐에서 제거된 메시지 수입니다. 메시지가 구성된 최대 전송 시도 수를 초과하면 브로커가 메시지를 종료합니다.
artemis_messages_expired
- 큐가 생성된 이후 지정된 큐에서 만료된 메시지 수입니다.
artemis_persistent_size
- 현재 지정된 큐에 있는 모든 메시지(비효율 및 실행 불가능한)의 영구 크기입니다. 여기에는 예약, 페이지링 및 전송 중 메시지가 포함됩니다.
artemis_scheduled_durable_message_count
- 지정된 큐의 예약된 메시지 수입니다.
artemis_scheduled_durable_persistent_size
- 지정된 큐의 영구 크기, 예약된 메시지입니다.
artemis_scheduled_message_count
- 지정된 큐의 예약된 메시지 수입니다.
artemis_scheduled_persistent_size
- 지정된 큐에 있는 예약된 메시지의 영구 크기입니다.
위에 나열되지 않은 상위 수준 브로커 메트릭의 경우 하위 수준 메트릭을 집계하여 이를 계산할 수 있습니다. 예를 들어 총 메시지 수를 계산하려면 브로커 배포의 모든 큐의 artemis_message_count
메트릭을 집계할 수 있습니다.
AMQ Broker를 온프레미스 배포하는 경우 브로커를 호스팅하는 JVM(Java Virtual Machine)에 대한 지표도 Prometheus 형식으로 내보냅니다. 이는 OpenShift Container Platform에서 AMQ Broker 배포에 적용되지 않습니다.
7.2.2. CR을 사용하여 Prometheus 플러그인 활성화
AMQ Broker를 설치하면 Prometheus 지표 플러그인이 설치에 포함됩니다. 활성화하면 플러그인은 브로커의 런타임 지표를 수집하고 Prometheus 형식으로 내보냅니다.
다음 절차에서는 CR을 사용하여 AMQ Broker에 대한 Prometheus 플러그인을 활성화하는 방법을 보여줍니다. 이 절차에서는 AMQ Broker 7.9 이상의 신규 및 기존 배포를 지원합니다.
실행 중인 브로커의 대체 절차는 7.2.3절. “환경 변수를 사용하여 실행 중인 브로커 배포에 대한 Prometheus 플러그인 활성화” 를 참조하십시오.
프로세스
브로커 배포에 사용하는 CR 인스턴스를 엽니다. 예를 들어 기본 배포의 CR은 다음과 유사할 수 있습니다.
apiVersion: broker.amq.io/v1beta1 kind: ActiveMQArtemis metadata: name: ex-aao spec: deploymentPlan: size: 4 image: registry.redhat.io/amq7/amq-broker-rhel8:7.12 ...
deploymentPlan
섹션에서enableMetricsPlugin
속성을 추가하고 아래 표시된 대로 값을true
로 설정합니다.apiVersion: broker.amq.io/v1beta1 kind: ActiveMQArtemis metadata: name: ex-aao spec: deploymentPlan: size: 4 image: registry.redhat.io/amq7/amq-broker-rhel8:7.12 ... enableMetricsPlugin: true
- enableMetricsPlugin
- 배포의 브로커에 Prometheus 플러그인이 활성화되어 있는지 여부를 지정합니다.
- CR 인스턴스를 저장합니다.
이전에 브로커 배포를 생성한 프로젝트로 전환합니다.
$ oc project <project_name>
명령줄에서 변경 사항을 적용합니다.
$ oc apply -f <path/to/custom_resource_instance>.yaml
지표 플러그인은 Prometheus 형식으로 브로커 런타임 지표를 수집하기 시작합니다.
추가 리소스
- 실행 중인 브로커 업데이트에 대한 자세한 내용은 3.4.3절. “실행 중인 브로커 배포에 사용자 정의 리소스 변경 사항 적용” 을 참조하십시오.
7.2.3. 환경 변수를 사용하여 실행 중인 브로커 배포에 대한 Prometheus 플러그인 활성화
다음 절차에서는 환경 변수를 사용하여 AMQ Broker에 대한 Prometheus 플러그인을 활성화하는 방법을 보여줍니다. 대체 절차는 7.2.2절. “CR을 사용하여 Prometheus 플러그인 활성화” 를 참조하십시오.
사전 요구 사항
- AMQ Broker Operator를 사용하여 생성된 브로커 Pod에 대한 Prometheus 플러그인을 활성화할 수 있습니다. 그러나 배포된 브로커는 AMQ Broker 7.7 이상에 브로커 컨테이너 이미지를 사용해야 합니다.
프로세스
- 브로커 배포가 포함된 프로젝트에 대한 관리자 권한으로 OpenShift Container Platform 웹 콘솔에 로그인합니다.
- 웹 콘솔에서 → 클릭합니다. 브로커 배포가 포함된 프로젝트를 선택합니다.
- 프로젝트에서 StatefulSets 또는 DeploymentConfigs를 보려면 → 를 클릭합니다.
- 브로커 배포에 해당하는 StatefulSet 또는 DeploymentConfig를 클릭합니다.
- 브로커 배포의 환경 변수에 액세스하려면 환경 탭을 클릭합니다.
새 환경 변수
AMQ_ENABLE_METRICS_PLUGIN
을 추가합니다. 변수 값을true
로 설정합니다.AMQ_ENABLE_METRICS_PLUGIN
환경 변수를 설정하면 OpenShift가 StatefulSet 또는 DeploymentConfig에서 각 브로커 Pod를 다시 시작합니다. 배포에 Pod가 여러 개 있는 경우 OpenShift는 각 포드를 차례로 다시 시작합니다. 각 브로커 Pod가 다시 시작되면 해당 브로커의 Prometheus 플러그인이 브로커 런타임 메트릭을 수집하기 시작합니다.
7.2.4. 실행중인 브로커 Pod에 대한 Prometheus 지표에 액세스
다음 절차에서는 실행 중인 브로커 Pod에 대한 Prometheus 메트릭에 액세스하는 방법을 보여줍니다.
사전 요구 사항
- 브로커 Pod에 대한 Prometheus 플러그인을 이미 활성화해야 합니다. 7.2.3절. “환경 변수를 사용하여 실행 중인 브로커 배포에 대한 Prometheus 플러그인 활성화”을 참조하십시오.
프로세스
메트릭이 액세스하려는 브로커 Pod의 경우 Pod를 AMQ 브로커 관리 콘솔에 연결하기 위해 이전에 생성한 경로를 식별해야 합니다. 경로 이름은 메트릭에 액세스하는 데 필요한 URL의 일부를 형성합니다.
- 클릭합니다.
선택한 브로커 Pod의 경우 Pod를 AMQ Broker 관리 콘솔에 연결하기 위해 생성된 경로를 확인합니다. Hostname 에서 표시된 전체 URL을 기록해 둡니다. 예를 들면 다음과 같습니다.
http://rte-console-access-pod1.openshiftdomain
Prometheus 지표에 액세스하려면 웹 브라우저에서
"/metrics"
가 추가된 이전에 명시된 경로 이름을 입력합니다. 예를 들면 다음과 같습니다.http://rte-console-access-pod1.openshiftdomain/metrics
콘솔 구성에서 SSL을 사용하지 않는 경우 URL에 http
를 지정합니다. 이 경우 호스트 이름의 DNS 확인은 트래픽을 OpenShift 라우터의 포트 80으로 보냅니다. 콘솔 구성에서 SSL을 사용하는 경우 URL에 https
를 지정합니다. 이 경우 브라우저가 기본적으로 OpenShift 라우터의 포트 443으로 설정됩니다. 이렇게 하면 OpenShift 라우터에서 기본적으로 라우터가 수행하는 SSL 트래픽에 포트 443도 사용하는 경우 콘솔에 성공적으로 연결할 수 있습니다.
7.3. Cryostat를 사용하여 브로커 런타임 데이터 모니터링
이 예에서는 Jolokia REST 인터페이스를 사용하여 브로커를 모니터링하는 방법을 보여줍니다.
사전 요구 사항
- 기본 브로커 배포를 완료하는 것이 좋습니다.
프로세스
실행 중인 Pod 목록을 가져옵니다.
$ oc get pods NAME READY STATUS RESTARTS AGE ex-aao-ss-1 1/1 Running 0 14d
oc logs
명령을 실행합니다.$ oc logs -f ex-aao-ss-1 ... Running Broker in /home/jboss/amq-broker ... 2021-09-17 09:35:10,813 INFO [org.apache.activemq.artemis.integration.bootstrap] AMQ101000: Starting ActiveMQ Artemis Server 2021-09-17 09:35:10,882 INFO [org.apache.activemq.artemis.core.server] AMQ221000: live Message Broker is starting with configuration Broker Configuration (clustered=true,journalDirectory=data/journal,bindingsDirectory=data/bindings,largeMessagesDirectory=data/large-messages,pagingDirectory=data/paging) 2021-09-17 09:35:10,971 INFO [org.apache.activemq.artemis.core.server] AMQ221013: Using NIO Journal 2021-09-17 09:35:11,114 INFO [org.apache.activemq.artemis.core.server] AMQ221057: Global Max Size is being adjusted to 1/2 of the JVM max size (-Xmx). being defined as 2,566,914,048 2021-09-17 09:35:11,369 WARNING [org.jgroups.stack.Configurator] JGRP000014: BasicTCP.use_send_queues has been deprecated: will be removed in 4.0 2021-09-17 09:35:11,385 WARNING [org.jgroups.stack.Configurator] JGRP000014: Discovery.timeout has been deprecated: GMS.join_timeout should be used instead 2021-09-17 09:35:11,480 INFO [org.jgroups.protocols.openshift.DNS_PING] serviceName [ex-aao-ping-svc] set; clustering enabled 2021-09-17 09:35:24,540 INFO [org.openshift.ping.common.Utils] 3 attempt(s) with a 1000ms sleep to execute [GetServicePort] failed. Last failure was [javax.naming.CommunicationException: DNS error] ... 2021-09-17 09:35:25,044 INFO [org.apache.activemq.artemis.core.server] AMQ221034: Waiting indefinitely to obtain live lock 2021-09-17 09:35:25,045 INFO [org.apache.activemq.artemis.core.server] AMQ221035: Live Server Obtained live lock 2021-09-17 09:35:25,206 INFO [org.apache.activemq.artemis.core.server] AMQ221080: Deploying address DLQ supporting [ANYCAST] 2021-09-17 09:35:25,240 INFO [org.apache.activemq.artemis.core.server] AMQ221003: Deploying ANYCAST queue DLQ on address DLQ 2021-09-17 09:35:25,360 INFO [org.apache.activemq.artemis.core.server] AMQ221080: Deploying address ExpiryQueue supporting [ANYCAST] 2021-09-17 09:35:25,362 INFO [org.apache.activemq.artemis.core.server] AMQ221003: Deploying ANYCAST queue ExpiryQueue on address ExpiryQueue 2021-09-17 09:35:25,656 INFO [org.apache.activemq.artemis.core.server] AMQ221020: Started EPOLL Acceptor at ex-aao-ss-1.ex-aao-hdls-svc.broker.svc.cluster.local:61616 for protocols [CORE] 2021-09-17 09:35:25,660 INFO [org.apache.activemq.artemis.core.server] AMQ221007: Server is now live 2021-09-17 09:35:25,660 INFO [org.apache.activemq.artemis.core.server] AMQ221001: Apache ActiveMQ Artemis Message Broker version 2.16.0.redhat-00022 [amq-broker, nodeID=8d886031-179a-11ec-9e02-0a580ad9008b] 2021-09-17 09:35:26,470 INFO [org.apache.amq.hawtio.branding.PluginContextListener] Initialized amq-broker-redhat-branding plugin 2021-09-17 09:35:26,656 INFO [org.apache.activemq.hawtio.plugin.PluginContextListener] Initialized artemis-plugin plugin ...
쿼리를 실행하여
MaxConsumers
에 대한 브로커를 모니터링합니다.$ curl -k -u admin:admin http://console-broker.amq-demo.apps.example.com/console/jolokia/read/org.apache.activemq.artemis:broker=%22amq-broker%22,component=addresses,address=%22TESTQUEUE%22,subcomponent=queues,routing-type=%22anycast%22,queue=%22TESTQUEUE%22/MaxConsumers {"request":{"mbean":"org.apache.activemq.artemis:address=\"TESTQUEUE\",broker=\"amq-broker\",component=addresses,queue=\"TESTQUEUE\",routing-type=\"anycast\",subcomponent=queues","attribute":"MaxConsumers","type":"read"},"value":-1,"timestamp":1528297825,"status":200}
8장. reference
8.1. 사용자 정의 리소스 구성 참조
CRD(Custom Resource Definition)는 Operator와 함께 배포된 사용자 정의 OpenShift 오브젝트의 구성 항목 스키마입니다. 해당 CR(사용자 정의 리소스) 인스턴스를 배포하여 CRD에 표시된 구성 항목의 값을 지정합니다.
다음 하위 섹션에서는 기본 브로커 CRD를 기반으로 사용자 정의 리소스 인스턴스에서 설정할 수 있는 구성 항목을 자세히 설명합니다.
8.1.1. 브로커 사용자 정의 리소스 구성 참조
기본 브로커 CRD를 기반으로 하는 CR 인스턴스를 사용하면 OpenShift 프로젝트에 배포할 브로커를 구성할 수 있습니다. 다음 표에서는 CR 인스턴스에서 구성할 수 있는 항목을 설명합니다.
배포하는 해당 CR(사용자 정의 리소스)에 별표(*)로 표시된 구성 항목이 필요합니다. 필수가 아닌 항목의 값을 명시적으로 지정하지 않으면 구성은 기본값을 사용합니다.
항목 | 하위 항목 | 설명 및 사용 |
---|---|---|
| 브로커 및 관리 콘솔에 연결하는 데 필요한 관리자 사용자 이름입니다.
값을 지정하지 않으면 값이 자동으로 생성되어 시크릿에 저장됩니다. 기본 시크릿 이름의 형식은 < 유형: 문자열 예: my-user 기본값: 자동으로 생성 된 임의의 값 | |
| 브로커 및 관리 콘솔에 연결하는 데 필요한 관리자 암호입니다.
값을 지정하지 않으면 값이 자동으로 생성되어 시크릿에 저장됩니다. 기본 시크릿 이름의 형식은 < 유형: 문자열 예: my-password 기본값: 자동으로 생성 된 임의의 값 | |
| 허용자, 커넥터 및 관리 콘솔을 위해 생성된 경로 및 인그레스의 호스트 이름에 사용자 지정 도메인을 추가합니다. 유형: 문자열 예: mydomain.com | |
| 브로커 배포 구성 | |
| 배포의 각 브로커에 사용되는 브로커 컨테이너 이미지의 전체 경로입니다.
CR에 Operator에서 사용할 브로커 컨테이너 이미지를 선택하는 방법을 알아보려면 2.7절. “Operator에서 컨테이너 이미지를 선택하는 방법” 을 참조하십시오. 유형: 문자열 예: registry.redhat.io/amq7/amq-broker-rhel8@sha256:55ae4e28b100534d63c34ab86f69230d274c999d1493f26fe3e75ba7a0ce 기본값: 자리 표시자 | |
| 배포에 생성할 브로커 Pod 수입니다.
값을 2 이상으로 지정하면 브로커 배포가 기본적으로 클러스터형됩니다. 클러스터 사용자 이름과 암호는 기본적으로 유형: int 예: 1 기본값: 1 | |
| 브로커에 연결하는 데 로그인 인증 정보가 필요한지 여부를 지정합니다. 유형: 부울 예: false 기본값: true | |
|
배포의 각 브로커 Pod에 저널 스토리지를 사용할지 여부를 지정합니다. 유형: 부울 예: false 기본값: true | |
| 브로커를 구성하는 데 사용되는 init 컨테이너 이미지입니다.
사용자 정의 이미지를 제공하려는 경우를 제외하고 CR에서 Operator에서 사용할 기본 제공 Init Container 이미지를 선택하는 방법을 알아보려면 2.7절. “Operator에서 컨테이너 이미지를 선택하는 방법” 을 참조하십시오. 사용자 정의 Init Container 이미지를 지정하는 방법을 알아보려면 4.11절. “사용자 정의 Init Container 이미지 지정” 을 참조하십시오. 유형: 문자열 예: registry.redhat.io/amq7/amq-broker-init-rhel8@sha256:442339c33549c3be9fe3b5c71184a753a3cf10b000b2ecc5bc9a062dd91c8def 기본값: 지정되지 않음 | |
| 비동기 I/O(AIO) 또는 비차단 I/O(NIO) 사용 여부를 지정합니다. 유형: 문자열 예: aio 기본값: nio | |
| 브로커 배포의 의도적인 축소로 인해 브로커 Pod가 종료되면 브로커 클러스터에서 계속 실행 중인 다른 브로커 Pod로 메시지를 마이그레이션할지 여부를 지정합니다. 유형: 부울 예: false 기본값: true | |
| 배포의 Pod에서 실행되는 각 브로커 컨테이너가 사용할 수 있는 최대 호스트 노드 CPU 양(밀리코어)입니다. 유형: 문자열 예: "500m" 기본값: OpenShift Container Platform 버전에서 사용하는 것과 동일한 기본값을 사용합니다. 클러스터 관리자를 참조하십시오. | |
| 배포의 Pod에서 실행 중인 각 브로커 컨테이너에서 사용할 수 있는 최대 호스트 노드 메모리(바이트)입니다. 바이트 표기법(예: K, M, G) 또는 바이너리 동등한 바이너리(Ki, Mi, Gi)를 지원합니다. 유형: 문자열 예: "1024M" 기본값: OpenShift Container Platform 버전에서 사용하는 것과 동일한 기본값을 사용합니다. 클러스터 관리자를 참조하십시오. | |
| 배포의 Pod에서 각 브로커 컨테이너가 명시적으로 요청하는 호스트 노드 CPU의 양입니다. 유형: 문자열 예: "250m" 기본값: OpenShift Container Platform 버전에서 사용하는 것과 동일한 기본값을 사용합니다. 클러스터 관리자를 참조하십시오. | |
| 배포의 Pod에서 명시적으로 요청하는 각 브로커 컨테이너의 호스트 노드 메모리 양(바이트)입니다. 바이트 표기법(예: K, M, G) 또는 바이너리 동등한 바이너리(Ki, Mi, Gi)를 지원합니다. 유형: 문자열 예: "512M" 기본값: OpenShift Container Platform 버전에서 사용하는 것과 동일한 기본값을 사용합니다. 클러스터 관리자를 참조하십시오. | |
|
배포의 각 브로커에 영구 스토리지에 필요한 PVC(영구 볼륨 클레임)의 크기(바이트)입니다. 이 속성은 유형: 문자열 예: 4Gi 기본값: 2Gi | |
|
배포의 브로커에 대해 Jolokia JVM 에이전트가 활성화되어 있는지 여부를 지정합니다. 이 속성의 값을 유형: 부울 예: true 기본값: false | |
|
배포의 브로커에 RBAC(역할 기반 액세스 제어)가 활성화되어 있는지 여부를 지정합니다. Fuse Console은 자체 역할 기반 액세스 제어를 사용하므로 Fuse Console을 유형: 부울 예: false 기본값: true | |
| Pod에 대한 예약 제약 조건을 지정합니다. 선호도 속성에 대한 자세한 내용은 OpenShift Container Platform 설명서의 속성을 참조하십시오. | |
| Pod의 허용 오차를 지정합니다. 허용 오차 속성에 대한 자세한 내용은 OpenShift Container Platform 설명서의 속성을 참조하십시오. | |
| 해당 노드에 예약할 Pod의 노드 레이블과 일치하는 라벨을 지정합니다. | |
| PVC(영구 볼륨 클레임)에 사용할 스토리지 클래스의 이름을 지정합니다. 스토리지 클래스는 관리자가 사용 가능한 스토리지를 설명하고 분류할 수 있는 방법을 제공합니다. 예를 들어 스토리지 클래스에는 특정 수준의 서비스 수준, 백업 정책 또는 연결된 기타 관리 정책이 있을 수 있습니다. 유형: 문자열 예: gp3 기본값: 지정되지 않음 | |
| 브로커 컨테이너 내의 AMQ Broker 애플리케이션이 시작되었는지 확인하도록 시작 프로브를 구성합니다. 시작 프로브 속성에 대한 자세한 내용은 OpenShift Container Platform 설명서의 속성을 참조하십시오. | |
| 실행 중인 브로커 컨테이너에서 주기적인 상태 점검을 구성하여 브로커가 실행 중인지 확인합니다. 활성 프로브 속성에 대한 자세한 내용은 OpenShift Container Platform 설명서의 속성을 참조하십시오. | |
| 브로커가 네트워크 트래픽을 수락하고 있는지 확인하도록 실행 중인 브로커 컨테이너에서 주기적인 상태 점검을 구성합니다. 준비 상태 프로브 속성에 대한 자세한 내용은 OpenShift Container Platform 설명서의 속성을 참조하십시오. | |
| 구성 정보가 포함된 시크릿 또는 configMAP를 브로커 Pod의 파일로 마운트합니다. 예를 들어 AMQ Broker에 대한 사용자 지정 로깅 구성이 포함된 보안을 마운트할 수 있습니다. 유형: object 예제 참조 4.18절. “브로커의 로깅 구성” 기본값: 지정되지 않음 | |
| 브로커 pod에 라벨을 할당합니다. 유형: 문자열 예: location: "production" 기본값: 지정되지 않음 | |
| 브로커 Pod를 실행하는 데 사용되는 보안 옵션을 정의합니다. 다음 기본 보안 값을 사용하면 브로커 Pod를 OpenShift Container Platform restricted SCC(보안 컨텍스트 제약 조건)에서 실행할 수 있습니다.
브로커를 사용자 정의 SCC에서 실행하려면 CR에서 다음
| |
| Pod에서 브로커 컨테이너를 실행하는 데 사용되는 보안 옵션을 정의합니다. 다음 기본값을 사용하면 컨테이너가 OpenShift Container Platform restricted SCC(보안 컨텍스트 제약 조건)에서 실행됩니다.
브로커를 사용자 정의 SCC에서 실행하려면 CR에서 다음
| |
| 브로커 Pod의 서비스 계정 이름을 지정합니다. 유형: 문자열 예: amq-broker-controller-manager 기본값: default | |
| 브로커 관리 콘솔 구성. | |
| OpenShift Container Platform 외부의 클라이언트에 관리 콘솔을 노출할지 여부를 지정합니다. 유형: 부울 예: true 기본값: false | |
| 경로 또는 인그레스를 사용하여 관리 콘솔을 노출할지 여부를 지정합니다. 기본적으로 관리 콘솔은 경로만 사용하여 노출됩니다. 유형: 문자열 예: ingress 기본값: route
Ingress를 사용하여 콘솔을 노출하는 경우 CR에서 | |
| 관리 콘솔에 노출된 경로 및 수신에 대한 사용자 정의 호스트 값을 지정합니다. 호스트 값에 다음 변수를 포함할 수 있습니다.
* $(CR_NAME) - CR의 * $(CR_NAMESPACE) - 사용자 정의 리소스의 네임스페이스입니다. * $(BROKER_ORDINAL) - StatefulSet에서 브로커 Pod에 할당된 서수 번호입니다.
* $(ITEM_NAME) - 콘솔 이름입니다. 기본 이름은
* $(RES_TYPE) - 리소스 유형입니다. 경로에는
* $(INGRESS_DOMAIN) - 유형: 문자열 예: console-$(CR_NAME)-$(ITEM_NAME)-$(BROKER_ORDINAL).mydomain.com | |
| 관리 콘솔 포트에서 SSL을 사용할지 여부를 지정합니다. 유형: 부울 예: true 기본값: false | |
|
브로커 키 저장소, 신뢰 저장소 및 해당 암호(모든 Base64 인코딩)가 저장되는 시크릿입니다. 유형: 문자열 예: my-broker-deployment-console-secret 기본값: 지정되지 않음 | |
| 관리 콘솔에 클라이언트 권한 부여가 필요한지 여부를 지정합니다. 유형: 부울 예: true 기본값: false | |
| 단일 허용자 구성 인스턴스입니다. | |
| acceptor 이름. 유형: 문자열 예: my-acceptor 기본값: 해당 없음 | |
| 어셉터 인스턴스에 사용할 포트 번호입니다. 유형: int 예: 5672 사용자가 정의한 첫 번째 승인자의 경우 61626 기본값 입니다. 그런 다음 기본값은 사용자가 정의한 모든 후속 수락자에 대해 10씩 증가합니다. | |
| 어셉터 인스턴스에서 활성화할 메시징 프로토콜입니다. 유형: 문자열 예: amqp,core 기본값: all | |
|
acceptor 포트에서 SSL이 활성화되어 있는지 여부를 지정합니다. 유형: 부울 예: true 기본값: false | |
| 브로커 키 저장소, 신뢰 저장소 및 해당 암호(모든 Base64 인코딩)가 저장되는 시크릿입니다.
허용자가 기본 이름을 가정하는 경우에도 항상 이 시크릿을 직접 생성해야 합니다. 유형: 문자열 예: my-broker-deployment-my-acceptor-secret 기본값: <custom_resource_name> - <acceptor_name> -secret | |
| TLS 통신에 사용할 암호화 제품군의 쉼표로 구분된 목록입니다.
클라이언트 애플리케이션에서 지원하는 가장 안전한 암호화 제품군을 지정합니다. 브로커와 클라이언트에 공통되는 암호화 제품군의 쉼표로 구분된 목록을 지정하거나 암호화 모음을 지정하지 않는 경우 브로커와 클라이언트는 사용할 암호화 제품군을 서로 협상합니다. 지정할 암호화 모음을 모르는 경우 먼저 디버그 모드에서 실행 중인 클라이언트와 broker-client 연결을 설정하여 브로커와 클라이언트 모두에 공통된 암호화 제품군을 확인할 수 있습니다. 그런 다음 브로커에서
사용 가능한 암호화 제품군은 브로커 및 클라이언트에서 사용하는 TLS 프로토콜 버전에 따라 다릅니다. 브로커를 업그레이드한 후 기본 TLS 프로토콜 버전이 변경되면 브로커와 클라이언트가 공통 암호화 제품군을 사용할 수 있도록 이전 TLS 프로토콜 버전을 선택해야 할 수 있습니다. 자세한 내용은 유형: 문자열 기본값: 지정되지 않음 | |
| TLS 통신에 사용할 쉼표로 구분된 프로토콜 목록입니다. 유형: 문자열 예: TLSv1,TLSv1.1,TLSv1.2 기본값: 지정되지 않음
TLS 프로토콜 버전을 지정하지 않으면 브로커는 JVM의 기본 버전을 사용합니다. 브로커가 JVM의 기본 TLS 프로토콜 버전을 사용하고 브로커를 업그레이드한 후 해당 버전이 변경되면 브로커 및 클라이언트에서 사용하는 TLS 프로토콜 버전이 호환되지 않을 수 있습니다. 이후 TLS 프로토콜 버전을 사용하는 것이 좋지만, | |
| 브로커가 사용하는 키 저장소 공급자의 이름입니다. 유형: 문자열 예: SunJCE 기본값: 지정되지 않음 | |
| 브로커가 사용하는 truststore 공급자의 이름입니다. 유형: 문자열 예: SunJCE 기본값: 지정되지 않음 | |
| 브로커가 사용하는 신뢰 저장소 유형입니다. 유형: 문자열 예: JCEKS 기본값: JKS | |
|
브로커가 수락자에 양방향 TLS가 필요하다는 것을 고객에게 알리는지 여부를 지정합니다. 이 속성은 유형: 부울 예: true 기본값: 지정되지 않음 | |
|
브로커가 클라이언트에 두 방향 TLS가 수락자에서 요청 되지만 필수는 아님을 알리는지 여부를 지정합니다. 이 속성은 유형: 부울 예: true 기본값: 지정되지 않음 | |
| 클라이언트 인증서의 CN(일반 이름)을 호스트 이름과 비교할지 여부를 지정하여 일치하는지 확인합니다. 이 옵션은 양방향 TLS가 사용되는 경우에만 적용됩니다. 유형: 부울 예: true 기본값: 지정되지 않음 | |
| SSL 공급자가 JDK 또는 OPENSSL인지 여부를 지정합니다. 유형: 문자열 예: OPENSSL 기본값: JDK | |
|
들어오는 연결의 유형: 문자열 예: some_regular_expression 기본값: 지정되지 않음 | |
| OpenShift Container Platform 외부의 클라이언트에 어셉터를 노출할지 여부를 지정합니다. 유형: 부울 예: true 기본값: false | |
| 경로 또는 수신을 사용하여 어셉터를 노출할지 여부를 지정합니다. 기본적으로 어셉터는 경로를 사용하여 노출됩니다. 유형: 문자열 예: ingress 기본값: route
Ingress를 사용하여 커넥터를 노출하는 경우 CR에 | |
| 허용자에 노출된 경로 및 수신에 대한 사용자 정의 호스트 값을 지정합니다. 호스트에 대해 다음 변수를 포함할 수 있습니다.
* $(CR_NAME) - CR의 * $(CR_NAMESPACE) - 사용자 정의 리소스의 네임스페이스입니다. * $(BROKER_ORDINAL) - StatefulSet에서 브로커 Pod에 할당된 서수 번호입니다. * $(ITEM_NAME) - 수락자의 이름입니다.
* $(RES_TYPE) - 리소스 유형입니다. 경로에는
* $(INGRESS_DOMAIN) - 유형: 문자열 예: my-acceptor-$(CR_NAME)-$(ITEM_NAME)-$(BROKER_ORDINAL).mydomain.com | |
|
클라이언트에서 유형: 문자열 예: jms.queue 기본값: 지정되지 않음 | |
|
클라이언트에서 유형: 문자열 예: /topic/ 기본값: 지정되지 않음 | |
| 허용되는 연결 수입니다. 이 제한에 도달하면 로그에 DEBUG 메시지가 표시되고 연결이 거부됩니다. 사용 중인 클라이언트 유형에 따라 연결이 거부될 때 발생하는 작업이 결정됩니다. 유형: 정수 예: 2 기본값: 0 (제한되지 않은 연결) | |
|
브로커가 AMQP 메시지를 큰 메시지로 처리하는 데 필요한 최소 메시지 크기(바이트)입니다. AMQP 메시지의 크기가 이 값과 같거나 크면 브로커는 메시지 저장을 위해 브로커가 사용하는 영구 볼륨(PV)의 대규모 메시지 디렉터리( 유형: 정수 예: 204800 기본값: 102400 (100 KB) | |
| true로 설정하면 Pod의 내부 IP 주소 대신 0.0.0.0 IP 주소로 브로커 수락자를 구성합니다. 브로커 승인자의 IP 주소가 0.0.0.0인 경우 Pod에 대해 구성된 모든 인터페이스에 바인딩되며 클라이언트는 OpenShift Container Platform 포트 전달을 사용하여 트래픽을 브로커로 보낼 수 있습니다. 일반적으로 이 구성을 사용하여 서비스를 디버그합니다. port-forwarding에 대한 자세한 내용은 OpenShift Container Platform 설명서의 컨테이너의 애플리케이션에 액세스하는 데 포트 전달을 참조하십시오. 참고 포트 전달을 잘못 사용하면 환경에 대한 보안 위험이 발생할 수 있습니다. 가능한 경우 프로덕션 환경에서 포트 전달을 사용하지 마십시오. 유형: 부울 예: true 기본값: false | |
| 단일 커넥터 구성 인스턴스입니다. | |
| 커넥터의 이름입니다. 유형: 문자열 예: my-connector 기본값: 해당 없음 | |
|
생성할 커넥터 유형입니다. 유형: 문자열 예: vm 기본값: tcp | |
| 연결할 호스트 이름 또는 IP 주소입니다. 유형: 문자열 예: 192.168.0.58 기본값: 지정되지 않음 | |
| 커넥터 인스턴스에 사용할 포트 번호입니다. 유형: int 예: 22222 기본값: 지정되지 않음 | |
|
커넥터 포트에서 SSL이 활성화되어 있는지 여부를 지정합니다. 유형: 부울 예: true 기본값: false | |
| 브로커 키 저장소, 신뢰 저장소 및 해당 암호(모든 Base64 인코딩)가 저장되는 시크릿입니다.
커넥터가 기본 이름을 가정하는 경우에도 항상 이 시크릿을 직접 생성해야 합니다. 유형: 문자열 예: my-broker-deployment-my-connector-secret 기본값: <custom_resource_name> - <connector_name> - 시크릿 | |
| TLS 통신에 사용할 암호화 제품군의 쉼표로 구분된 목록입니다. 유형: 문자열 참고: 커넥터의 경우 암호화 제품군 목록을 지정하지 않는 것이 좋습니다. 기본값: 지정되지 않음 | |
| 브로커가 사용하는 키 저장소 공급자의 이름입니다. 유형: 문자열 예: SunJCE 기본값: 지정되지 않음 | |
| 브로커가 사용하는 truststore 공급자의 이름입니다. 유형: 문자열 예: SunJCE 기본값: 지정되지 않음 | |
| 브로커가 사용하는 신뢰 저장소 유형입니다. 유형: 문자열 예: JCEKS 기본값: JKS | |
| TLS 통신에 사용할 쉼표로 구분된 프로토콜 목록입니다. 유형: 문자열 예: TLSv1,TLSv1.1,TLSv1.2 기본값: 지정되지 않음 | |
|
브로커가 커넥터에 양방향 TLS가 필요함을 알리는지 여부를 지정합니다. 이 속성은 유형: 부울 예: true 기본값: 지정되지 않음 | |
|
브로커가 클라이언트에 양방향 TLS가 커넥터에서 요청 되지만 필수는 아님을 알리는지 여부를 지정합니다. 이 속성은 유형: 부울 예: true 기본값: 지정되지 않음 | |
| 클라이언트 인증서의 CN(일반 이름)을 호스트 이름과 비교할지 여부를 지정하여 일치하는지 확인합니다. 이 옵션은 양방향 TLS가 사용되는 경우에만 적용됩니다. 유형: 부울 예: true 기본값: 지정되지 않음 | |
|
SSL 공급자가 유형: 문자열 예: OPENSSL 기본값: JDK | |
|
발신 연결의 유형: 문자열 예: some_regular_expression 기본값: 지정되지 않음 | |
| OpenShift Container Platform 외부의 클라이언트에 커넥터를 노출할지 여부를 지정합니다. 유형: 부울 예: true 기본값: false | |
| 경로 또는 수신을 사용하여 커넥터를 노출할지 여부를 지정합니다. 기본적으로 커넥터는 경로를 사용하여만 노출됩니다. 유형: 문자열 예: ingress 기본값: route
Ingress를 사용하여 커넥터를 노출하는 경우 CR에 | |
| 경로에 대한 사용자 정의 호스트 값을 지정하고 커넥터에 노출된 인그레스를 지정합니다. 호스트 값에 다음 변수를 포함할 수 있습니다.
* $(CR_NAME) - CR의 * $(CR_NAMESPACE) - 사용자 정의 리소스의 네임스페이스입니다. * $(BROKER_ORDINAL) - StatefulSet에서 브로커 Pod에 할당된 서수 번호입니다. * $(ITEM_NAME) - 커넥터의 이름입니다.
* $(RES_TYPE) - 리소스 유형입니다. 경로에는
* $(INGRESS_DOMAIN) - 유형: 문자열 예: my-connector-$(CR_NAME)-$(ITEM_NAME)-$(BROKER_ORDINAL).$(INGRESS_DOMAIN).mydomain.com | |
| Operator가 일치하는 각 주소 또는 주소 집합에 대해 CR에 추가하는 구성을 적용하는 방법을 지정합니다. 지정할 수 있는 값은 다음과 같습니다.
유형: 문자열 예: replace_all 기본값: merge_all | |
| 일치하는 주소 또는 주소 집합에 대한 주소 설정입니다. | |
|
유형: 문자열 예: DROP 기본값: PAGE | |
| 브로커가 메시지를 보낼 때 브로커가 자동으로 주소를 생성하는지 또는 존재하지 않는 주소에 바인딩된 큐에서 메시지를 사용하려고 하는지 여부를 지정합니다. 유형: 부울 예: false 기본값: true | |
| 브로커가 전달되지 않은 메시지를 수신할 dead letter 주소와 큐를 자동으로 생성하는지 여부를 지정합니다.
매개변수가 유형: 부울 예: true 기본값: false | |
| 브로커가 만료된 메시지를 수신하기 위해 주소와 큐를 자동으로 생성하는지 여부를 지정합니다.
매개변수가 유형: 부울 예: true 기본값: false | |
|
이 속성은 더 이상 사용되지 않습니다. 대신 | |
|
이 속성은 더 이상 사용되지 않습니다. 대신 | |
| 클라이언트가 메시지를 보내거나 아직 존재하지 않는 큐에서 메시지를 사용하려고 할 때 브로커가 큐를 자동으로 생성하는지 여부를 지정합니다. 유형: 부울 예: false 기본값: true | |
| 브로커에 더 이상 큐가 없는 경우 브로커가 자동으로 생성된 주소를 자동으로 삭제하는지 여부를 지정합니다. 유형: 부울 예: false 기본값: true | |
| 주소에 큐가 없는 경우 브로커가 자동으로 생성된 주소를 삭제하기 전에 대기하는 시간(밀리초)입니다. 유형: 정수 예: 100 기본값: 0 | |
|
이 속성은 더 이상 사용되지 않습니다. 대신 | |
|
이 속성은 더 이상 사용되지 않습니다. 대신 | |
| 큐에 소비자가 없고 메시지가 없는 경우 브로커가 자동으로 생성된 큐를 자동으로 삭제하는지 여부를 지정합니다. 유형: 부울 예: false 기본값: true | |
| 큐에 소비자가 없고 메시지가 없는 경우 브로커가 수동으로 생성된 큐를 자동으로 삭제하는지 여부를 지정합니다. 유형: 부울 예: true 기본값: false | |
| 브로커가 큐에 소비자가 없을 때 자동으로 생성된 큐를 자동으로 삭제하기 전에 대기하는 시간(밀리초)입니다. 유형: 정수 예: 10 기본값: 0 | |
| 브로커가 큐를 자동으로 삭제할 수 있는지 여부를 평가하기 전에 큐에 있을 수 있는 최대 메시지 수입니다. 유형: 정수 예: 5 기본값: 0 | |
| 구성 파일이 다시 로드되면 이 매개변수는 구성 파일에서 삭제된 주소(및 해당 대기열)를 처리하는 방법을 지정합니다. 다음 값을 지정할 수 있습니다.
유형: 문자열 예: FORCE 기본값: OFF | |
| 구성 파일이 다시 로드되면 이 설정은 브로커가 구성 파일에서 삭제된 큐를 처리하는 방법을 지정합니다. 다음 값을 지정할 수 있습니다.
유형: 문자열 예: FORCE 기본값: OFF | |
| 브로커가 dead (즉, 전달되지 않은) 메시지를 보내는 주소입니다. 유형: 문자열 예: DLA 기본값: 없음 | |
| 브로커가 자동으로 생성된 dead letter 큐의 이름에 적용되는 접두사입니다. 유형: 문자열 예: myDLQ. 기본값: DLQ. | |
| 브로커가 자동으로 생성된 dead letter 큐에 적용되는 접미사입니다. 유형: 문자열 예 : .DLQ 기본값: 없음 | |
| 자동으로 생성된 주소에 사용되는 라우팅 유형입니다. 유형: 문자열 예: ANYCAST 기본값: MULTICAST | |
| 메시지 디스패치 전에 필요한 소비자 수는 주소의 큐에 대해 시작될 수 있습니다. 유형: 정수 예: 5 기본값: 0 | |
| 소비자의 기본 창 크기(바이트)입니다. 유형: 정수 예: 300000 기본값: 1048576 (1024*1024) | |
|
유형: 정수 예: 5 기본값: -1 (마운트 없음) | |
| 기본적으로 주소의 모든 큐가 배타적 대기열인지 여부를 지정합니다. 유형: 부울 예: true 기본값: false | |
| 메시지 그룹화에 사용할 버킷 수입니다. 유형: 정수 예: 0 (메시지 그룹화 비활성화) 기본값: -1 (제한 없음) | |
| 그룹에서 첫 번째 메시지를 소비자에 나타내는 데 사용되는 키입니다. 유형: 문자열 예: firstMessageKey 기본값: 없음 | |
| 새 소비자가 브로커에 연결할 때 그룹을 재조정할지 여부를 지정합니다. 유형: 부울 예: true 기본값: false | |
| 브로커가 그룹 재조정하는 동안 메시지 디스패치를 일시 중지할지 여부를 지정합니다. 유형: 부울 예: true 기본값: false | |
| 주소의 모든 큐가 기본적으로 마지막 값 대기열인지 여부를 지정합니다. 유형: 부울 예: true 기본값: false | |
| 마지막 값 큐에 사용할 기본 키입니다. 유형: 문자열 예: shares_ticker 기본값: 없음 | |
| 언제든지 큐에 허용된 최대 소비자 수입니다. 유형: 정수 예: 100 기본값: -1 (제한 없음) | |
| 주소의 모든 큐가 기본적으로 파괴되지 않는지 여부를 지정합니다. 유형: 부울 예: true 기본값: false | |
| 소비자가 없으면 브로커가 대기열의 내용을 제거하는지 여부를 지정합니다. 유형: 부울 예: true 기본값: false | |
|
자동으로 생성된 큐에 사용되는 라우팅 유형입니다. 기본값은 유형: 문자열 예: ANYCAST 기본값: MULTICAST | |
| 링 크기가 명시적으로 설정되지 않은 일치하는 큐의 기본 링 크기입니다. 유형: 정수 예: 3 기본값: -1 (크기 제한 없음) | |
| Prometheus 플러그인과 같이 구성된 메트릭 플러그인이 일치하는 주소 또는 주소 세트에 대한 지표를 수집하는지 여부를 지정합니다. 유형: 부울 예: false 기본값: true | |
| 만료된 메시지를 수신하는 주소입니다. 유형: 문자열 예: myExpiryAddress 기본값: 없음 | |
| 기본 만료 시간을 사용하는 메시지에 적용되는 만료 시간(밀리초)입니다. 유형: 정수 예: 100 기본값: -1 (연장 시간이 적용되지 않음) | |
| 브로커가 자동으로 생성된 만료 큐의 이름에 적용되는 접두사입니다. 유형: 문자열 예: myExp. 기본값: EXP. | |
| 브로커가 자동으로 생성된 만료 대기열 이름에 적용되는 접미사입니다. 유형: 문자열 예 : .EXP 기본값: 없음 | |
| 큐에서 마지막 값만 사용하는지 여부를 지정합니다. 유형: 부울 예: true 기본값: false | |
| 관리 리소스에서 검색할 수 있는 메시지 수를 지정합니다. 유형: 정수 예: 100 기본값: 200 | |
| 브로커에 구성된 주소에 대한 주소 설정과 일치하는 문자열입니다. 정확한 주소 이름을 지정하거나 주소 설정과 주소 집합과 일치하도록 와일드카드 표현식을 사용할 수 있습니다.
와일드카드 표현식을 유형: 문자열 예: 'myAddresses*' 기본값: 없음 | |
| 구성된 dead letter 주소로 메시지를 보내기 전에 브로커가 메시지를 전달하려고 하는 횟수를 지정합니다. 유형: 정수 예: 20 기본값: 10 | |
| 이 값보다 큰 만료 시간을 사용하는 메시지에 적용되는 만료 시간(밀리초)입니다. 유형: 정수 예: 20 기본값: -1 (최대 만료 시간이 적용되지 않음) | |
| 브로커가 수행한 메시지 재전송 시도 사이의 최대 값(밀리초)입니다. 유형: 정수 예: 100
기본값 은 기본값인 | |
|
주소에 대한 최대 메모리 크기(바이트)입니다. 유형: 문자열 예: 10Mb 기본값: -1 (제한 없음) | |
|
브로커가 메시지 거부를 시작하기 전에 주소가 도달할 수 있는 최대 크기(바이트)입니다. 유형: 정수 예: 500 기본값: -1 (최대 크기 없음) | |
| 브로커가 주소에 대한 메시지 카운터 기록을 유지하는 일 수입니다. 유형: 정수 예: 5 기본값: 0 | |
| 이 값보다 낮은 만료 시간을 사용하는 메시지에 적용되는 만료 시간(밀리초)입니다. 유형: 정수 예: 20 기본값: -1 (최소 만료 시간이 적용되지 않음) | |
| 페이징 탐색 중에 I/O를 최적화하기 위해 메모리에 저장할 페이지 파일 수입니다. 유형: 정수 예: 10 기본값: 5 | |
|
크기(바이트)입니다. 또한 유형: 문자열 예: 20971520 기본값: 10485760 (약 10.5MB) | |
| 브로커가 취소된 메시지를 다시 전달할 때까지 대기하는 시간(밀리초)입니다. 유형: 정수 예: 100 기본값: 0 | |
| 나머지 메시지를 다시 배포하기 전에 브로커가 대기열에서 마지막 소비자를 종료한 후 대기하는 시간(밀리초)입니다. 유형: 정수 예: 100 기본값: -1 (설정되지 않음) | |
| 주소에서 향후 대기열을 생성할 메시지 수입니다. 유형: 정수 예: 100 기본값: 0 | |
| 메시지를 큐로 라우팅할 수 없는 경우 구성된 dead letter 주소로 전송할지 여부를 지정합니다. 유형: 부울 예: true 기본값: false | |
| 브로커가 느린 소비자를 확인하는 빈도( 초 )입니다. 유형: 정수 예: 15 기본값: 5 | |
|
느린 소비자가 식별될 때 발생하는 상황을 지정합니다. 유효한 옵션은 유형: 문자열 예: KILL 기본값: NOTIFY | |
| 소비자가 느리게 간주되기 전에 초당 메시지의 최소 사용률입니다. 유형: 정수 예: 100 기본값: -1 (설정되지 않음) | |
|
| 브로커의 환경 변수를 설정합니다. 유형: array 예:
이름: TZ 기본값: 해당 없음 |
| 브로커의 CRD(Custom Resource Definitions)에 노출되지 않고 사용자 정의 리소스(CR)에서 구성할 수 없는 브로커 속성을 구성합니다. | |
| 브로커에 대해 구성할 속성 이름 및 값 목록입니다. 유형: 문자열 예: globalMaxSize=512m 기본값: 해당 없음 | |
|
Operator에서 배포할 AMQ Broker 컨테이너 이미지의 버전을 지정합니다. 예를 들어
버전 번호에서 마이크로 및 마이너 숫자를 생략하여 최신 마이크로 또는 마이너 릴리스에서 사용할 수 있는 브로커 이미지로 자동 업그레이드할 수 있습니다. 예를 들어 7.11 버전을 지정하면 Operator는 최신 유형: 문자열 예: 7.12.3 기본값: AMQ Broker의 현재 버전 |
8.1.2. 주소 사용자 정의 리소스 구성 참조
주소 CRD를 기반으로 하는 CR 인스턴스를 사용하면 배포에서 브로커의 주소와 큐를 정의할 수 있습니다. 다음 표에서는 구성할 수 있는 항목에 대해 자세히 설명합니다.
배포하는 해당 CR(사용자 정의 리소스)에 별표(*)로 표시된 구성 항목이 필요합니다. 필수가 아닌 항목의 값을 명시적으로 지정하지 않으면 구성은 기본값을 사용합니다.
항목 | 설명 및 사용 |
---|---|
| 브로커에서 생성할 주소 이름입니다. 유형: 문자열 예: address0 기본값: 지정되지 않음 |
|
브로커에 생성할 대기열 이름입니다. 유형: 문자열 예: queue0 기본값: 지정되지 않음 |
|
해당 배포에 대한 주소 CR 인스턴스를 제거할 때 Operator가 배포의 모든 브로커의 기존 주소를 제거하는지 여부를 지정합니다. 기본값은 유형: 부울 예: true 기본값: false |
|
사용할 라우팅 유형; 유형: 문자열 예: anycast 기본값: 멀티 캐스트 |
8.1.3. 보안 사용자 정의 리소스 구성 참조
보안 CRD를 기반으로 하는 CR 인스턴스를 사용하면 다음을 포함하여 배포의 브로커에 대한 보안 구성을 정의할 수 있습니다.
- 사용자 및 역할
-
propertiesLoginModule
,guestLoginModule
및keycloakLoginModule
을 포함한 로그인 모듈 - 역할 기반 액세스 제어
- 콘솔 액세스 제어
많은 옵션을 사용하려면 보안 브로커에 설명된 브로커 보안 개념을 이해해야 합니다. https://access.redhat.com/documentation/en-us/red_hat_amq_broker/7.12/html-single/configuring_amq_broker/#assembly-br-securing-brokers_configuring
다음 표에서는 구성할 수 있는 항목에 대해 자세히 설명합니다.
배포하는 해당 CR(사용자 정의 리소스)에 별표(*)로 표시된 구성 항목이 필요합니다. 필수가 아닌 항목의 값을 명시적으로 지정하지 않으면 구성은 기본값을 사용합니다.
항목 | 하위 항목 | 설명 및 사용 |
---|---|---|
loginModules | 하나 이상의 로그인 모듈 구성. 로그인 모듈은 다음 유형 중 하나일 수 있습니다.
| |
propertiesLoginModule | name* | 로그인 모듈의 이름입니다. 유형: 문자열 예: my-login 기본값: 해당 없음 |
users.name* | 사용자 이름입니다. 유형: 문자열 예: jdoe 기본값: 해당 없음 | |
users.password* | 사용자 암호입니다. 유형: 문자열 예: password 기본값: 해당 없음 | |
users.roles | 역할의 이름입니다. 유형: 문자열 예: viewer 기본값: 해당 없음 | |
guestLoginModule | name* | 게스트 로그인 모듈의 이름입니다. 유형: 문자열 예: guest-login 기본값: 해당 없음 |
guestUser | 게스트 사용자의 이름입니다. 유형: 문자열 예: myguest 기본값: 해당 없음 | |
guestRole | guest 사용자의 역할 이름입니다. 유형: 문자열 예: guest 기본값: 해당 없음 | |
keycloakLoginModule | name | KeycloakLoginModule의 이름 유형: 문자열 예: sso 기본값: 해당 없음 |
moduleType | KeycloakLoginModule 유형(directAccess 또는 bearerToken) 유형: 문자열 예: 베어러Token 기본값: 해당 없음 | |
configuration | 다음 구성 항목은 Red Hat Single Sign-On과 관련이 있으며 자세한 내용은 OpenID Connect 설명서에서 확인할 수 있습니다. | |
configuration.realm* | KeycloakLoginModule의 영역 유형: 문자열 예: myrealm 기본값: 해당 없음 | |
configuration.realmPublicKey | 영역의 공개 키 유형: 문자열 기본값: 해당 없음 | |
configuration.authServerUrl* | keycloak 인증 서버의 URL 유형: 문자열 기본값: 해당 없음 | |
configuration.sslRequired | SSL이 필요한지 여부를 지정 유형: 문자열 유효한 값은 'all', 'external' 및 'none'입니다. | |
configuration.resource* | 리소스 이름 애플리케이션의 클라이언트 ID입니다. 각 애플리케이션에는 애플리케이션을 식별하는 데 사용되는 클라이언트 ID가 있습니다. | |
configuration.publicClient | 공용 클라이언트인지 여부를 지정합니다. 유형: 부울 기본값: false 예: false | |
configuration.credentials.key | 인증 정보 키를 지정합니다. 유형: 문자열 기본값: 해당 없음 유형: 문자열 기본값: 해당 없음 | |
configuration.credentials.value | 인증 정보 값 지정 유형: 문자열 기본값: 해당 없음 | |
configuration.useResourceRoleMappings | 리소스 역할 매핑 사용 여부를 지정합니다. 유형: 부울 예: false | |
configuration.enableCors | CORS(Cross-Origin Resource Sharing) 활성화 여부를 지정합니다. CORS preflight 요청을 처리합니다. 또한 액세스 토큰을 살펴보고 유효한 출처를 확인합니다. 유형: 부울 기본값: false | |
configuration.corsMaxAge | CORS 최대 기간 CORS가 활성화된 경우 Access-Control-Max-Age 헤더의 값을 설정합니다. | |
configuration.corsAllowedMethods | CORS 허용 방법 CORS가 활성화된 경우 Access-Control-Allow-Methods 헤더 값을 설정합니다. 쉼표로 구분된 문자열이어야 합니다. | |
configuration.corsAllowedHeaders | CORS 허용 헤더 CORS가 활성화된 경우 Access-Control-Allow-Headers 헤더 값을 설정합니다. 쉼표로 구분된 문자열이어야 합니다. | |
configuration.corsExposedHeaders | CORS 노출된 헤더 CORS가 활성화된 경우 Access-Control-Expose-Headers 헤더 값을 설정합니다. 쉼표로 구분된 문자열이어야 합니다. | |
configuration.exposeToken | 액세스 토큰을 노출할지 여부 지정 유형: 부울 기본값: false | |
configuration.bearerOnly | 전달자 토큰을 확인할지 여부 지정 유형: 부울 기본값: false | |
configuration.autoDetectBearerOnly | 자동 감지 전달자 토큰만 지정할지 여부 지정 유형: 부울 기본값: false | |
configuration.connectionPoolSize | 연결 풀의 크기 유형: 정수 기본값: 20 | |
configuration.allowAnyHostName | 호스트 이름을 허용할지 여부 지정 유형: 부울 기본값: false | |
configuration.disableTrustManager | 신뢰 관리자를 비활성화할지 여부를 지정 유형: 부울 기본값: false | |
configuration.trustStore* | 신뢰 저장소의 경로 ssl-required가 none 또는 disable-trust-manager 가 true인 경우를 제외하고 이는 REQUIRED입니다. | |
configuration.trustStorePassword* | truststore 암호 truststore가 설정되어 있고 truststore에 암호가 필요한 경우 이는 REQUIRED입니다. | |
configuration.clientKeyStore | 클라이언트 키 저장소의 경로 유형: 문자열 기본값: 해당 없음 | |
configuration.clientKeyStorePassword | 클라이언트 키 저장소 암호 유형: 문자열 기본값: 해당 없음 | |
configuration.clientKeyPassword | 클라이언트 키 암호 유형: 문자열 기본값: 해당 없음 | |
configuration.alwaysRefreshToken | 토큰을 항상 새로 고칠지 여부 지정 유형: 부울 예: false | |
configuration.registerNodeAtStartup | 시작 시 노드를 등록할지 여부 지정 유형: 부울 예: false | |
configuration.registerNodePeriod | 노드 재등록 기간 유형: 문자열 기본값: 해당 없음 | |
configuration.tokenStore | 토큰 저장소 유형(세션 또는 쿠키) 유형: 문자열 기본값: 해당 없음 | |
configuration.tokenCookiePath | 쿠키 저장소의 쿠키 경로 유형: 문자열 기본값: 해당 없음 | |
configuration.principalAttribute | UserPrincipal 이름을 채울 OpenID Connect ID 토큰 속성 UserPrincipal 이름을 채울 OpenID Connect ID 토큰 속성입니다. token 속성이 null인 경우 기본값은 sub입니다. 가능한 값은 sub, preferred_username, email, name, nickname, given_name, family_name입니다. | |
configuration.proxyUrl | 프록시 URL | |
configuration.turnOffChangeSessionIdOnLogin | 성공적인 로그인 시 세션 ID를 변경할지 여부를 지정 유형: 부울 예: false | |
configuration.tokenMinimumTimeToLive | 활성 액세스 토큰을 새로 고치는 최소 시간 유형: 정수 기본값: 0 | |
configuration.minTimeBetweenJwksRequests | 새 공개 키를 검색하기 위해 Keycloak로의 두 요청 사이의 최소 간격 유형: 정수 기본값: 10 | |
configuration.publicKeyCacheTtl | 새 공개 키를 검색하기 위해 Keycloak에 대한 두 요청 사이의 최대 간격 유형: 정수 기본값: 86400 | |
configuration.ignoreOauthQueryParameter | 전달자 토큰 처리를 위해 access_token 쿼리 매개변수 처리를 해제할지 여부 유형: 부울 예: false | |
configuration.verifyTokenAudience | 토큰에 이 클라이언트 이름(리소스)이 대상자로 포함되어 있는지 확인합니다. 유형: 부울 예: false | |
configuration.enableBasicAuth | 기본 인증 지원 여부 유형: 부울 기본값: false | |
configuration.confidentialPort | SSL/TLS를 통한 보안 연결을 위해 Keycloak 서버에서 사용하는 기밀 포트 유형: 정수 예: 8443 | |
configuration.redirectRewriteRules.key | Redirect URI를 일치시키는 데 사용되는 정규식입니다. 유형: 문자열 기본값: 해당 없음 | |
configuration.redirectRewriteRules.value | 대체 문자열 유형: 문자열 기본값: 해당 없음 | |
configuration.scope | DirectAccessGrantsLoginModule의 OAuth2 범위 매개변수 유형: 문자열 기본값: 해당 없음 | |
securityDomains | 브로커 보안 도메인 | |
brokerDomain.name | 브로커 도메인 이름 유형: 문자열 예: activemq 기본값: 해당 없음 | |
brokerDomain.loginModules |
하나 이상의 로그인 모듈. 각 항목은 위의 | |
brokerDomain.loginModules.name | 로그인 모듈 이름 유형: 문자열 예: prop-module 기본값: 해당 없음 | |
brokerDomain.loginModules.flag |
propertiesLoginModule과 동일하지만 필수 , 유형: 문자열 예: 충분합니다. 기본값: 해당 없음 | |
brokerDomain.loginModules.debug | Debug | |
brokerDomain.loginModules.reload | 다시 로드 | |
consoleDomain.name | 브로커 도메인 이름 유형: 문자열 예: activemq 기본값: 해당 없음 | |
consoleDomain.loginModules | 단일 로그인 모듈 구성. | |
consoleDomain.loginModules.name | 로그인 모듈 이름 유형: 문자열 예: prop-module 기본값: 해당 없음 | |
consoleDomain.loginModules.flag |
propertiesLoginModule과 동일하지만 필수 , 유형: 문자열 예: 충분합니다. 기본값: 해당 없음 | |
consoleDomain.loginModules.debug | Debug 유형: 부울 예: false | |
consoleDomain.loginModules.reload | 다시 로드 유형: 부울 예: true 기본값: false | |
securitySettings |
| |
broker.match | 보안 설정 섹션의 주소 일치 패턴입니다. 일치 패턴 구문에 대한 자세한 내용은 AMQ Broker 와일드카드 구문을 참조하십시오. | |
broker.permissions.operationType | 권한 설정에 설명된 대로 보안 설정 의 작업 유형입니다. 유형: 문자열 예: createAddress 기본값: 해당 없음 | |
broker.permissions.roles | 보안 설정은 권한 설정에 설명된 대로 이러한 역할에 적용됩니다. 유형: 문자열 예: root 기본값: 해당 없음 | |
securitySettings.management |
| |
hawtioRoles | 브로커 콘솔에 로그인할 수 있는 역할입니다. 유형: 문자열 예: root 기본값: 해당 없음 | |
connector.host | 관리 API에 연결하기 위한 커넥터 호스트입니다. 유형: 문자열 예: myhost 기본값: localhost | |
connector.port | 관리 API에 연결하기 위한 커넥터 포트입니다. 유형: 정수 예: 1099 기본값: 1099 | |
connector.jmxRealm | 관리 API의 Cryostat 영역. 유형: 문자열 예: activemq 기본값: activemq | |
connector.objectName | 관리 API의 개체 이름입니다. 유형: 문자열 예: connector:name=rmi 기본값: connector:name=rmi | |
connector.authenticatorType | 관리 API 인증 유형입니다. 유형: 문자열 예: password 기본값: password | |
connector.secured | 관리 API 연결의 보안 여부입니다. 유형: 부울 예: true 기본값: false | |
connector.keyStoreProvider | 관리 커넥터의 키 저장소 공급자입니다. connector.secured="true"를 설정하는 경우 필수 항목입니다. 기본값은 JKS입니다. | |
connector.keyStorePath | 키 저장소의 위치입니다. connector.secured="true"를 설정하는 경우 필수 항목입니다. | |
connector.keyStorePassword | 관리 커넥터의 키 저장소 암호입니다. connector.secured="true"를 설정하는 경우 필수 항목입니다. | |
connector.trustStoreProvider | connector.secured="true"를 설정한 경우 필요한 관리 커넥터의 신뢰 저장소 공급자입니다. 유형: 문자열 예: JKS 기본값: JKS | |
connector.trustStorePath | 관리 커넥터를 위한 신뢰 저장소의 위치입니다. connector.secured="true"를 설정하는 경우 필수 항목입니다. 유형: 문자열 기본값: 해당 없음 | |
connector.trustStorePassword | 관리 커넥터의 truststore 암호입니다. connector.secured="true"를 설정하는 경우 필수 항목입니다. 유형: 문자열 기본값: 해당 없음 | |
connector.passwordCodec | 관리 커넥터용 암호 코드c입니다. 구성 파일에서 암호 암호화에 설명된 대로 사용할 암호 codec의 정규화된 클래스 이름입니다. | |
authorisation.allowedList.domain | allowedList의 도메인 유형: 문자열 기본값: 해당 없음 | |
authorisation.allowedList.key | allowedList의 키 유형: 문자열 기본값: 해당 없음 | |
authorisation.defaultAccess.method | defaultAccess 목록의 방법 유형: 문자열 기본값: 해당 없음 | |
authorisation.defaultAccess.roles | defaultAccess List의 역할 유형: 문자열 기본값: 해당 없음 | |
authorisation.roleAccess.domain | roleAccess List의 도메인 유형: 문자열 기본값: 해당 없음 | |
authorisation.roleAccess.key | roleAccess List의 키 유형: 문자열 기본값: 해당 없음 | |
authorisation.roleAccess.accessList.method | roleAccess List의 방법 유형: 문자열 기본값: 해당 없음 | |
authorisation.roleAccess.accessList.roles | roleAccess List의 역할 유형: 문자열 기본값: 해당 없음 | |
applyToCrNames | 현재 네임스페이스에서 이름이 지정된 CR에 의해 정의된 브로커에 이 보안 구성을 적용합니다. 값이 * 또는 빈 문자열은 모든 브로커에 적용되는 것을 의미합니다. 유형: 문자열 예: my-broker 기본값: 현재 네임스페이스의 CR에 의해 정의된 모든 브로커입니다. |
8.2. JAAS 로그인 모듈 구성 예
다음 예제에서는 properties 로그인 모듈과 LDAP 로그인 모듈이 모두 구성된 JAAS 로그인 모듈 구성을 보여줍니다. properties 로그인 모듈은 Operator가 브로커로 인증하는 데 사용하는 인증 정보가 포함된 기본 로그인 모듈을 참조합니다.
activemq { org.apache.activemq.artemis.spi.core.security.jaas.LDAPLoginModule required debug=true initialContextFactory=com.sun.jndi.ldap.LdapCtxFactory connectionURL="LDAP://localhost:389" connectionUsername="CN=Administrator,CN=Users,OU=System,DC=example,DC=com" connectionPassword=redhat.123 connectionProtocol=s connectionTimeout="5000" authentication=simple userBase="dc=example,dc=com" userSearchMatching="(CN={0})" userSearchSubtree=true readTimeout="5000" roleBase="dc=example,dc=com" roleName=cn roleSearchMatching="(member={0})" roleSearchSubtree=true; org.apache.activemq.artemis.spi.core.security.jaas.PropertiesLoginModule reload=true org.apache.activemq.jaas.properties.user="artemis-users.properties" org.apache.activemq.jaas.properties.role="artemis-roles.properties" baseDir="/home/jboss/amq-broker/etc"; };
다음 예제에서는 별도의 영역에 두 개의 속성 로그인 모듈이 있는 JAAS 로그인 모듈 구성을 보여줍니다.
-
기본 속성 로그인 모듈은
console
이라는 영역에 있으며 브로커로 인증하는 데 Operator 및 AMQ Management Console에서 사용하는 속성 파일이 있습니다. -
activemq
영역의 로그인 모듈에는 새 속성 파일이 있으며, 예를 들어 메시징 사용자를 인증하는 인증 정보가 포함될 수 있습니다.
예를 들어 Operator가 브로커로 인증하는 데 사용하는 로그인 모듈이 포함된 영역에 특정 보안 제어를 적용할 수 있습니다.
activemq { org.apache.activemq.artemis.spi.core.security.jaas.PropertiesLoginModule reload=true org.apache.activemq.jaas.properties.user="new-users.properties" org.apache.activemq.jaas.properties.role="new-roles.properties" }; console { org.apache.activemq.artemis.spi.core.security.jaas.PropertiesLoginModule reload=true org.apache.activemq.jaas.properties.user="artemis-users.properties" org.apache.activemq.jaas.properties.role="artemis-roles.properties" baseDir="/home/jboss/amq-broker/etc"; };
기본적으로 AMQ 관리 콘솔은 인증을 위해 activemq
영역의 기본 속성 로그인 모듈을 사용합니다. 예제와 같이 기본 속성 로그인 모듈이 다른 영역에 구성된 경우 브로커 CR의 환경 변수를 설정하여 해당 영역을 사용하도록 AMQ 관리 콘솔을 구성해야 합니다. 예를 들면 다음과 같습니다.
spec: ... env: - name: JAVA_ARGS_APPEND value: --Hawtio.realm=console ...
CR에서 환경 변수 설정에 대한 자세한 내용은 4.9절. “브로커 컨테이너의 환경 변수 설정” 을 참조하십시오.
8.3. 예: Red Hat Single Sign-On을 사용하도록 AMQ 브로커 구성
이 예에서는 JAAS 로그인 모듈을 사용하여 인증 및 권한 부여에 Red Hat Single Sign-On을 사용하도록 AMQ Broker를 구성하는 방법을 보여줍니다.
사전 요구 사항
LDAP 디렉터리와 통합된 Red Hat Single Sign-On 인스턴스.
- LDAP 디렉터리는 AMQ Broker의 사용자 및 역할 정보로 채워집니다.
- Red Hat Single Sign-On은 LDAP 서버에서 사용자를 통합하도록 구성되어 있습니다.
- Red Hat Single Sign-On은 role-ldap-mapper를 사용하여 LDAP의 역할 정보를 Red Hat Single Sign-On에 매핑하도록 구성되어 있습니다.
다음을 포함하는 Red Hat Single Sign-On 영역
oAuth 프로토콜을 사용하여 토큰을 가져올 수 있는 AMQ 관리 콘솔과 같은 애플리케이션에 대해 다음 설정으로 구성된 클라이언트는 다음과 같습니다.
인증 흐름: 표준 흐름
유효한 리디렉션 URI: AMQ Management Console의 OpenShift Container Platform 경로입니다. 예: http://artemis-wconsj-0-svc-rte-kc-ldap-tests-0eae49.apps.redhat-412t.broker.app-services-dev.net/console/*
oAuth 프로토콜을 사용하여 토큰을 가져올 수 없는 메시징 클라이언트 애플리케이션이 있는 경우 다음 설정으로 구성된 별도의 클라이언트입니다.
인증 흐름: 직접 액세스 권한 부여
유효한 리디렉션 URI: *
Red Hat Single Sign-On의 각 영역에는 Broker
라는 클라이언트가 포함되어 있습니다. 이 클라이언트는 AMQ Broker와 관련이 없습니다.
프로세스
login.config
라는 텍스트 파일을 생성하고 JAAS 로그인 모듈 구성을 추가하여 AMQ Broker를 Red Hat Single Sign-On과 연결합니다. 예를 들면 다음과 같습니다.console { // ensure the operator can connect to the broker by referencing the existing properties config org.apache.activemq.artemis.spi.core.security.jaas.PropertiesLoginModule sufficient org.apache.activemq.jaas.properties.user="artemis-users.properties" org.apache.activemq.jaas.properties.role="artemis-roles.properties" baseDir="/home/jboss/amq-broker/etc"; org.keycloak.adapters.jaas.BearerTokenLoginModule sufficient keycloak-config-file="/amq/extra/secrets/sso-jaas-config/_keycloak-bearer-token.json" role-principal-class=org.apache.activemq.artemis.spi.core.security.jaas.RolePrincipal; }; activemq { org.keycloak.adapters.jaas.BearerTokenLoginModule sufficient keycloak-config-file="/amq/extra/secrets/sso-jaas-config/_keycloak-bearer-token.json" role-principal-class=org.apache.activemq.artemis.spi.core.security.jaas.RolePrincipal; org.keycloak.adapters.jaas.DirectAccessGrantsLoginModule sufficient keycloak-config-file="/amq/extra/secrets/sso-jaas-config/_keycloak-direct-access.json" role-principal-class=org.apache.activemq.artemis.spi.core.security.jaas.RolePrincipal; org.apache.activemq.artemis.spi.core.security.jaas.PrincipalConversionLoginModule required principalClassList=org.keycloak.KeycloakPrincipal; };
참고-
.json
구성 파일의 경로는/amq/extra/secrets/name-jaas-config
형식이어야 합니다. name 의 경우 문자열 값을 지정합니다. 이 절차의 뒷부분에서 생성하는 시크릿의 이름을 지정하려면 동일한 문자열 값과-jaas-config
접미사를 사용해야 합니다. -
login.config
파일에서console
이라는 영역은 AMQ Management Console 사용자 및 메시징 클라이언트를 인증하기 위해activemq
라는 영역을 인증하는 데 사용됩니다.
-
다음 로그인 모듈은 login.config
파일 예제에서 구성됩니다.
로그인 모듈 | 설명 및 사용 |
---|---|
org.apache.activemq.artemis.spi.core.security.jaas.PropertiesLoginModule |
이는 기본 로그인 모듈이며 브로커로 인증하는 Operator에 필요한 기본 사용자가 포함된 |
org.keycloak.adapters.jaas.BearerTokenLoginModule | 이 로그인 모듈은 oAuth 프로토콜을 사용하여 토큰을 가져올 수 있는 AMQ 관리 콘솔과 같은 애플리케이션용입니다. 사용자가 브라우저 창에서 AMQ Management Console을 열면 전달자 토큰을 얻기 위해 Red Hat Single Sign-On 콘솔로 리디렉션됩니다. |
org.keycloak.adapters.jaas.DirectAccessGrantsLoginModule | 이 로그인 모듈은 oAuth 프로토콜을 사용할 수 없는 메시징 클라이언트와 같은 HTTP 이외의 애플리케이션에 필요합니다. 이 로그인 모듈을 사용하여 브로커는 먼저 Red Hat Single Sign-On에 구성된 시크릿을 사용하여 클라이언트를 인증한 다음 클라이언트를 대신하여 토큰을 가져옵니다. |
org.apache.activemq.artemis.spi.core.security.jaas.PrincipalConversionLoginModule | 이 로그인 모듈은 수신된 Keycloak 주체를 AMQ Broker에서 사용할 수 있는 JAAS 주체로 변환하는 데 필요합니다. |
login.config
파일 예에서 각 .json
속성 파일 이름에 밑줄 접두사가 있습니다. Operator는 JaasPropertiesApplied
조건의 상태를 보고할 때 밑줄이 붙은 파일을 무시합니다. 밑줄 접두사가 없는 경우 브로커가 타사 로그인 모듈에서 사용하는 속성 파일을 인식하지 못하기 때문에 JaasPropertiesApplied
조건의 상태는 OutofSync
로 표시됩니다. 상태 보고에 대한 자세한 내용은 4.3.2.1절. “보안 사용자 정의 리소스(CR)를 사용하여 기본 JAAS 로그인 모듈 구성” 을 참조하십시오.
로그인 모듈에서 참조하는 각
.json
속성 파일에 대한 텍스트 파일을 생성하고 AMQ Broker를 Red Hat Single Sign-On에 연결하는 데 필요한 세부 정보를 구성합니다. 예를 들면 다음과 같습니다._keycloak-bearer-token.json
{ "realm": "amq-broker-ldap", "resource": "amq-console", "auth-server-url": "https://keycloak-svc-rte-kc-ldap-tests-0eae49.apps.412t.broker.app-services-dev.net", "principal-attribute": "preferred_username", "use-resource-role-mappings": false, "ssl-required": "external", "confidential-port": 0 }
_keycloak-direct-access.json
{ "realm": "amq-broker-ldap", "resource": "amq-broker", "auth-server-url": "https://keycloak-svc-rte-kc-ldap-tests-0eae49.apps.412t.broker.app-services-dev.net", "principal-attribute": "preferred_username", "use-resource-role-mappings": false, "ssl-required": "external", "credentials": { "secret": "Lfk6g1ZKlGzNT6eRkz0d1scM4M29Ohmn" } }
- realm
- Red Hat Single Sign-On에서 AMQ Broker 애플리케이션 및 서비스를 인증하도록 구성된 영역입니다.
- resource
- Red Hat Single Sign-On에 구성된 클라이언트의 클라이언트 ID입니다.
- auth-server-url
- Red Hat Single Sign-On 서버의 기본 URL입니다.
- principal-attribute
- UserPrincipal 이름을 채울 토큰 특성입니다.
- use-resource-role-mappings
- true로 설정하면 Red Hat Single Sign-On은 토큰 내부에서 사용자의 애플리케이션 수준 역할 매핑을 찾습니다. false인 경우 사용자 역할 매핑의 영역 수준을 확인합니다. 기본값은 false입니다.
- SSL-필수
-
Red Hat Single Sign-On 서버와의 모든 통신이 HTTPS를 초과하도록 합니다. 기본값은
external
입니다. 즉, 외부 요청에 HTTPS가 기본적으로 필요합니다. - credentials
- 브로커가 Red Hat Single Sign-On에 로그인하고 클라이언트를 대신하여 토큰을 얻는 데 사용하는 Red Hat Single Sign-On에 구성된 시크릿입니다.
_keycloak-js-client.json
이라는 텍스트 파일을 생성하고 AMQ Management Console에서 사용자를 자격 증명을 입력하는 Red Hat Single Sign-On 관리 콘솔의 URL로 리디렉션하는 데 필요한 구성을 추가합니다. 예를 들면 다음과 같습니다.{ "realm": "amq-broker-ldap", "clientId": "amq-console", "url": "https://keycloak-svc-rte-kc-ldap-tests-0eae49.apps.412t.broker.app-services-dev.net" }
oc create secret
명령을 사용하여 로그인 모듈 구성에서 참조되는 파일이 포함된 보안을 생성합니다. 예를 들면 다음과 같습니다.oc create secret generic sso-jaas-config --from-file=login.config --from-file=artemis-users.properties --from-file=artemis-roles.properties --from-file=_keycloak-bearer-token.json --from-file=_keycloak-direct-access.json --from-file=_keycloak-js-client.json
참고-
Operator가 로그인 모듈 구성이 포함되어 있음을 인식하고 각 브로커 Pod에 업데이트를 전파할 수 있도록 시크릿 이름에
-jaas-config
접미사가 있어야 합니다. -
시크릿 이름은
login.config
파일에 지정한.json
구성 파일의 경로에 있는 마지막 디렉터리 이름과 일치해야 합니다. 예를 들어 구성 파일의 경로가/amq/extra/secrets/sso-jaas-config
인 경우 시크릿 이름을sso-jaas-config
여야 합니다.
시크릿 생성 방법에 대한 자세한 내용은 Kubernetes 문서의 시크릿을 참조하십시오. https://kubernetes.io/docs/concepts/configuration/secret/
-
Operator가 로그인 모듈 구성이 포함되어 있음을 인식하고 각 브로커 Pod에 업데이트를 전파할 수 있도록 시크릿 이름에
브로커 배포를 위해 ActiveMQArtemis CR(사용자 정의 리소스) 인스턴스에 생성한 시크릿을 추가합니다.
OpenShift 명령줄 인터페이스 사용:
- 브로커 배포를 위해 프로젝트에 CR을 배포할 수 있는 권한이 있는 사용자로 OpenShift에 로그인합니다.
배포에 사용할 CR을 편집합니다.
oc edit ActiveMQArtemis <CR instance name> -n <namespace>
OpenShift Container Platform 웹 콘솔 사용:
- 브로커 배포를 위해 프로젝트에 CR을 배포할 권한이 있는 사용자로 콘솔에 로그인합니다.
- 왼쪽 창에서 → 를 클릭합니다.
- Red Hat Integration - AMQ Broker for RHEL 8 (Multiarch) Operator를 클릭합니다.
- AMQ Broker 탭을 클릭합니다.
- ActiveMQArtemis 인스턴스 이름의 이름을 클릭합니다.
YAML 탭을 클릭합니다.
콘솔에서 YAML 편집기가 열리고 CR 인스턴스를 구성할 수 있습니다.
extraMounts
속성 및 secret 속성을 생성하고 시크릿 이름을 추가합니다.다음 예제에서는
custom-jaas-config
라는 시크릿을 CR에 추가합니다.deploymentPlan: ... extraMounts: secrets: - "sso-jaas-config" ...
ActiveMQArtemis
CR에서 인증에 Red Hat Single Sign-On을 사용하기 위해 AMQ Management Console에 필요한 hawtio 설정이 포함된 환경 변수를 생성합니다. 환경 변수의 내용은 브로커를 호스팅하는 JVM이 시작될 때 Java 애플리케이션 시작자에게 인수로 전달됩니다. 예를 들면 다음과 같습니다.env: - name: JAVA_ARGS_APPEND value: -Dhawtio.rolePrincipalClasses=org.apache.activemq.artemis.spi.core.security.jaas.RolePrincipal -Dhawtio.keycloakEnabled=true -Dhawtio.keycloakClientConfig=/amq/extra/secrets/sso-jaas-config/_keycloak-js-client.json -Dhawtio.authenticationEnabled=true -Dhawtio.realm=console
hawtio 설정에 대한 자세한 내용은 hawtio 설명서 를 참조하십시오.
ActiveMQArtemis
CR의spec
섹션에서brokerProperties
속성을 추가하고 LDAP 디렉터리에 구성된 역할에 대한 권한을 추가합니다. 단일 주소에 대한 역할 권한을 부여할 수 있습니다. 또는#
기호를 사용하여 와일드카드를 지정하여 모든 주소에 역할 권한을 부여할 수 있습니다. 예를 들면 다음과 같습니다.spec: ... brokerProperties: - securityRoles.#.producers.send=true - securityRoles.#.consumers.consume=true ...
CR을 저장합니다.
Operator는 각 Pod의
/amq/extra/secrets/시크릿 이름
디렉터리에 있는 시크릿에 파일을 마운트하고 기본login.config
파일 대신 SSO 구성이 포함된 마운트된login.config
파일을 읽도록 브로커 JVM을 구성합니다.
8.4. 로깅
OpenShift 로그를 보는 것 외에도 컨테이너 콘솔에 출력되는 AMQ 로그를 확인하여 OpenShift Container Platform 이미지에서 실행 중인 AMQ Broker 문제를 해결할 수 있습니다.
프로세스
- 명령줄에서 다음 명령을 실행합니다.
$ oc logs -f <pass:quotes[<pod-name>]> <pass:quotes[<container-name>]>
2024-12-04에 최종 업데이트된 문서