Ceph Blog(https://ceph.io/en/news/blog/)를 보다가 관심 가는 글이 보여서 AI번역+약간 교정해 보았습니다.
출처: https://ceph.io/en/news/blog/2025/simplifying-object-new-cephadm/
소개¶
프로덕션 환경에 바로 적용 가능한 객체 스토리지 솔루션을 구축하는 것은 어려울 수 있으며, 특히 SSL/TLS 암호화, 최적의 데이터 배치, 다중 사이트 복제 등 복잡한 요구 사항을 관리할 때 더욱 그렇습니다. 구축 과정에서는 시스템이 프로덕션 환경에 정식으로 도입되면 중요해지는 구성 옵션을 간과하기 쉽습니다.
기존에는 고가용성, 보안 및 효율적인 데이터 처리를 위해 Ceph를 구성하려면 사용자가 멀티사이트 복제, 암호화, 고가용성 등 필요에 따라 여러 매개변수를 수동으로 조정해야 했습니다. 이러한 초기 복잡성으로 인해 프로덕션 환경에 바로 적용 가능한 Object Storage 구성을 구축하는 것이 매우 까다로웠습니다.
이러한 과제를 해결하기 위해 Ceph RGW 및 관련 서비스의 배포를 간소화하는 Ceph 오케스트레이터에 몇 가지 새로운 기능을 도입했습니다. Ceph Object Gateway 및 Ingress 서비스 사양 파일을 개선하여 몇 가지 구성 단계만으로 즉시 운영 환경에 적용 가능한 RGW 설정을 구현할 수 있습니다. 이러한 개선 사항에는 자동화된 SSL/TLS 구성, 가상 호스트 버킷 액세스 지원, 비용 효율적인 데이터 저장을 위한 삭제 코딩 등이 포함됩니다.
이러한 개선 사항의 목적은 관리자에게 Ceph Object Gateway 및 Ingress Service(로드 밸런서)에 대한 안전하고 확장 가능하며 프로덕션에 즉시 사용 가능한 구성을 보장하는 원활한 배포 환경을 제공하는 것입니다.
이 블로그 게시물에서는 이러한 새로운 기능 각각을 살펴보고, 이 기능이 해결하는 문제에 대해 논의하며, cephadm 사양 파일을 사용하여 몇 분 만에 완벽하게 작동하는 Ceph Object Gateway를 설정하는 방법을 보여드리겠습니다.
주요 기능¶
가상 호스트 버킷 액세스 및 자체 서명 인증서¶
RGW 구축의 주요 과제 중 하나는 가상 호스트 스타일 URL을 사용하여 버킷에 원활하게 액세스하는 것입니다. 가상 호스트 버킷 액세스를 사용하는 애플리케이션과 사용자의 경우, 필요한 주체 대체 이름(SAN)을 포함하는 적절한 SSL/TLS 인증서가 매우 중요합니다. 이를 간소화하기 위해 사용자가 사용자 지정 인증서를 제공하지 않을 경우 Object Gateway에 대한 자체 서명 인증서를 자동으로 생성하는 옵션을 추가했습니다. 이러한 자체 서명 인증서에는 TLS/SSL이 가상 호스트 버킷 액세스와 원활하게 작동할 수 있도록 하는 SAN 항목이 포함되어 있습니다.
완전한 TLS/SSL 클라이언트-RGW 암호화¶
보안은 모든 프로덕션급 배포에서 최우선 순위이며, Ceph 커뮤니티는 클라이언트에서 Object Gateway 서비스까지 전체 TLS/SSL 암호화를 점점 더 많이 요청하고 있습니다. 이전에는 Ingress 구현 방식이 HAProxy 수준에서만 SSL 종료를 지원했기 때문에 HAProxy와 RGW 간의 통신을 암호화할 수 없었습니다.
이 문제를 해결하기 위해 사용자가 HAProxy와 RGW 간의 트래픽을 재암호화할지, 아니면 클라이언트에서 RGW로의 TLS 연결이 그대로 유지되는 패스스루 모드를 사용할지 선택할 수 있는 구성 가능한 옵션을 추가했습니다. 이러한 유연성을 통해 사용자는 완벽한 종단 간 암호화를 구현하여 전송 중에도 민감한 데이터를 항상 안전하게 보호할 수 있습니다.
멀티사이트 복제 구성¶
이전에는 Ceph 멀티사이트 배포 시 Realm, ZoneGroup, Zone을 구성하고 멀티사이트 복제에 포함될 Zone 간의 관계를 설정하는 여러 명령을 실행해야 했습니다. RGW 관리자 모듈 덕분에 이제 멀티사이트 부트스트랩 및 구성을 두 단계로 수행할 수 있습니다. Object Storage Replication 블로그 게시물에 예시가 있습니다.
Squid 릴리스에서는 RGW 사양 파일 옵션을 사용하여 cephadm 사양 파일을 통해 클라이언트 트래픽 목적으로만 전용 개체 게이트웨이를 구성하는 기능도 추가했습니다 .
disable_multisite_sync_traffic: True
Ceph Object Gateway를 특정 작업에 전용으로 사용하는 이점은 블로그 게시물 ” Ceph Object Storage Multisite Replication Series”에서 다룹니다. 3부
부트스트랩 중에 Spec 파일에서 Erasure 코딩된 데이터 풀을 구성¶
오브젝트 스토리지는 오브젝트 스토리지 솔루션의 TCO(총소유비용)를 절감하기 위해 데이터 풀에 이레이저 코딩(Erasure Coding)을 사용하는 경우가 많습니다. 사양 파일에 이레이저 코딩(EC) 풀 구성 옵션이 포함되어 있습니다. 이를 통해 사용자는 RGW 데이터 풀의 EC 프로필, 장치 클래스 및 장애 도메인을 정의하여 데이터 배치 및 스토리지 효율성을 제어할 수 있습니다.
Ceph 객체 배포 연습¶
Ceph와 cephadm를 처음 사용하는 경우 Ceph를 사용한 Ceph 클러스터 배포 자동화 : Cephadm과 Ansible을 사용한 단계별 가이드(1부) 블로그 게시물을 통해 Ceph 서비스의 원하는 상태를 선언적 YAML 사양 파일로 정의하여 Ceph를 배포하고 구성하는 방법과 cephadm에 대한 개요를 얻을 수 있습니다.
아래에서는 오케스트레이터에 추가된 새로운 기능을 사용하여 프로덕션에 바로 사용할 수 있는 RGW 설정을 배포하는 데 필요한 CLI 명령을 살펴보겠습니다 cephadm.
RGW 관리자 모듈 활성화¶
첫 번째 단계는 RGW 관리자 모듈을 활성화하는 것입니다. 이 모듈은 cephadm을 통해 RGW 서비스를 관리하는 데 필요합니다.
# ceph mgr module enable rgw
다음으로, Object Gateway 서비스에 대한 사양 파일을 생성합니다. 이 사양 파일에는 영역, 영역 및 영역 그룹 설정, SSL/TLS, 데이터 풀의 EC 프로필 등이 포함됩니다.
# cat << EOF > /root/rgw-client.spec
service_type: rgw
service_id: client
service_name: rgw.client
placement:
label: rgw
count_per_host: 1
networks:
- 192.168.122.0/24
spec:
rgw_frontend_port: 4443
rgw_realm: multisite
rgw_zone: zone1
rgw_zonegroup: multizg
generate_cert: true
ssl: true
zonegroup_hostnames:
- s3.cephlab.com
data_pool_attributes:
type: ec
k: 2
m: 2
extra_container_args:
- "--stop-timeout=120"
config:
rgw_exit_timeout_secs: "120"
rgw_graceful_stop: true
EOF
이 스펙 파일에서 RGW 서비스는 데이터 풀에 대해 2+2 프로파일(k: 2, m: 2)의 삭제 코딩을 사용하도록 지정합니다. 이는 복제 설정 대비 저장 비용을 절감합니다. 또한 RGW 서비스의 안전한 SSL/TLS 통신을 보장하기 위해 자체 서명 인증서(generate_cert: true)를 생성합니다. zonegroup_hostnames를 통해 지정된 도메인 bucket.s3.cephlab.com을 사용한 가상 호스트 버킷 접근을 활성화합니다. rgw_gracefull_stop 구성 매개변수를 통해 객체 게이트웨이 서비스의 우아한 중지(graceful stopping)를 설정합니다. 우아한 중지 시 서비스는 지정된 120초 타임아웃 내에 모든 클라이언트 연결이 종료(드레인)될 때까지 대기합니다.
RGW 영역 부트스트래핑¶
사양 파일이 생성되면 RGW 서비스를 부트스트랩합니다. 이 단계에서는 사양 파일에 지정된 구성으로 RGW 서비스를 생성하고 배포합니다.
# ceph rgw realm bootstrap -i rgw-client.spec
RGW 서비스 확인¶
cephadm bootstrap 명령어는 사양 파일에 정의된 구성을 비동기적으로 적용합니다. 곧 RGW 서비스가 가동될 것이며, ceph orch ps 명령어를 사용하여 상태를 확인할 수 있습니다.
# ceph orch ps --daemon_type rgw NAME HOST PORTS STATUS REFRESHED AGE MEM USE MEM LIM VERSION IMAGE ID CONTAINER ID rgw.client.ceph-node-05.yquamf ceph-node-05.cephlab.com 192.168.122.175:4443 running (32m) 94s ago 32m 91.2M - 19.2.0-53.el9cp fda78a7e8502 a0c39856ddd8 rgw.client.ceph-node-06.zfsutg ceph-node-06.cephlab.com 192.168.122.214:4443 running (32m) 94s ago 32m 92.9M - 19.2.0-53.el9cp fda78a7e8502 82c21d350cb7
이 출력은 RGW 서비스가 지정된 노드에서 실행되고 구성된 4443/tcp 포트를 통해 액세스할 수 있음을 보여줍니다.
데이터 풀 확인¶
RGW 데이터 풀이 삭제 코딩으로 올바르게 구성되었는지 확인하려면 다음 명령을 사용할 수 있습니다.
# ceph osd pool ls detail | grep data pool 24 'zone1.rgw.buckets.data' erasure profile zone1_zone_data_pool_ec_profile size 4 min_size 3 crush_rule 1 object_hash rjenkins pg_num 32 pgp_num 32 autoscale_mode on last_change 258 lfor 0/0/256 flags hashpspool stripe_width 8192 application rgw
삭제 코드 프로필 보기¶
데이터 풀에 사용된 삭제 코드 프로필에 대한 자세한 내용을 보려면 아래를 실행하세요.
# ceph osd erasure-code-profile get zone1_zone_data_pool_ec_profile crush-device-class= crush-failure-domain=host crush-num-failure-domains=0 crush-osds-per-failure-domain=0 crush-root=default jerasure-per-chunk-alignment=false k=2 m=2 plugin=jerasure technique=reed_sol_van w=8
이는 삭제 코드 프로필이 Reed-Solomon 기술을 사용하여 k=2와 m=2 로 구성 되었음을 확인합니다 .
Ingress 서비스 구성¶
마지막으로, 여러 RGW 데몬으로 트래픽을 부하 분산하도록 인그레스 서비스를 구성해야 합니다. 인그레스 서비스에 대한 사양 파일을 생성합니다.
# cat << EOF > rgw-ingress.yaml
service_type: ingress
service_id: rgw
placement:
hosts:
- ceph-node-06.cephlab.com
- ceph-node-07.cephlab.com
spec:
backend_service: rgw.client
virtual_ip: 192.168.122.152/24
frontend_port: 443
monitor_port: 1967
use_tcp_mode_over_rgw: True
EOF
이 스펙 파일은 가상(플로팅) IP(VIP) 주소 192.168.122.152로 인그레스 서비스를 설정하고, 오브젝트 게이트웨이와의 통신에 TCP 모드를 사용하도록 지정하여 전체 과정에서 SSL/TLS가 유지되도록 합니다. backend_service를 통해 HAproxy의 백엔드로 사용할 RGW 서비스를 지정합니다. Ceph 클러스터에서는 서로 관련 없는 여러 RGW 서비스를 동시에 실행할 수 있기 때문입니다.
로드 밸런서 및 SSL/TLS 구성 테스트¶
우리의 인그레스 서비스 스택은 VIP의 고가용성(HA)을 위해 keepalived를 사용하며, HAproxy가 로드 밸런싱을 담당합니다:
# ceph orch ps --service_name ingress.rgw NAME HOST PORTS STATUS REFRESHED AGE MEM USE MEM LIM VERSION IMAGE ID CONTAINER ID haproxy.rgw.ceph-node-06.vooxuh ceph-node-06.cephlab.com *:443,1967 running (58s) 46s ago 58s 5477k - 2.4.22-f8e3218 0d25561e922f 4cd458e1f6b0 haproxy.rgw.ceph-node-07.krdmsb ceph-node-07.cephlab.com *:443,1967 running (56s) 46s ago 56s 5473k - 2.4.22-f8e3218 0d25561e922f 4d18247e7615 keepalived.rgw.ceph-node-06.cwraia ceph-node-06.cephlab.com running (55s) 46s ago 55s 1602k - 2.2.8 6926947c161f 50fd6cf57187 keepalived.rgw.ceph-node-07.svljiw ceph-node-07.cephlab.com running (53s) 46s ago 53s 1598k - 2.2.8 6926947c161f aaab5d79ffdd
서비스가 실행 중인 ceph-node-06에서 haproxy 구성을 확인해 보면, 오브젝트 게이트웨이 서비스의 백엔드 구성에 TCP 패스스루 방식을 사용하고 있음을 확인할 수 있습니다.
# ssh ceph-node-06.cephlab.com cat /var/lib/ceph/93d766b0-ae6f-11ef-a800-525400ac92a7/haproxy.rgw.ceph-node-06.vooxuh/haproxy/haproxy.cfg | grep -A 10 "frontend frontend"
...
backend backend
mode tcp
balance roundrobin
option ssl-hello-chk
server rgw.client.ceph-node-05.yquamf 192.168.122.175:4443 check weight 100 inter 2s
server rgw.client.ceph-node-06.zfsutg 192.168.122.214:4443 check weight 100 inter 2s
SSL/TLS 구성이 제대로 작동하는지 확인하기 위해 curl로 엔드포인트 테스트를 실행할 수 있습니다. curl 명령을 실행 중인 클라이언트 시스템에서 CA를 신뢰하지 않는 것을 확인할 수 있습니다.
# curl https://192.168.122.152 curl: (60) SSL certificate problem: unable to get local issuer certificate More details here: https://curl.se/docs/sslcerts.html curl failed to verify the legitimacy of the server and therefore could not establish a secure connection to it.
이 문제를 해결하려면 클라이언트 시스템의 신뢰할 수 있는 저장소에 Cephadm 루트 CA 인증서를 추가해야 합니다.
# ceph orch cert-store get cert cephadm_root_ca_cert > /etc/pki/ca-trust/source/anchors/cephadm-root-ca.crt # update-ca-trust
신뢰할 수 있는 스토어를 업데이트한 후 다시 테스트할 수 있습니다.
# curl https://s3.cephlab.com <?xml version="1.0" encoding="UTF-8"?><ListAllMyBucketsResult xmlns="http://s3.amazonaws.com/doc/2006-03-01/"><Owner><ID>anonymous</ID></Owner><Buckets></Buckets></ListAllMyBucketsResult>
이것은 SSL/TLS 자체 서명 인증서 구성이 올바르게 작동하며 RGW 서비스에 HTTPS를 통해 접근할 수 있음을 확인합니다. 보시다시피, 저희는 DNS 하위 도메인 s3.cephlab.com과 와일드카드 *.s3.cephlab.com을 VIP 주소 192.168.122.152로 가리키도록 구성했습니다. 또한, 모든 트래픽이 단일 haproxy 로드 밸런싱 노드를 통과하지 않도록 여러 VIP 주소를 구성할 수 있다는 점을 언급하는 것이 중요합니다. VIP IP 목록을 사용할 때는 virtual_ips_list 옵션을 사용해야 합니다.
결론¶
cephadm 오케스트레이터의 이러한 새로운 기능은 Ceph RGW 배포의 접근성, 보안성, 그리고 프로덕션 환경 구축에 있어 중요한 진전을 보여줍니다. SSL/TLS 암호화, 가상 호스트 버킷 액세스, 멀티사이트 복제, 삭제 코딩과 같은 복잡한 구성을 자동화함으로써 관리자는 최소한의 수동 개입으로 프로덕션 환경에 바로 적용할 수 있는 RGW 설정을 구축할 수 있습니다.
Squid 릴리스에 대한 자세한 내용은 Laura Flores의 블로그 게시물을 확인하세요.
여기에 설명된 일부 기능은 Squid 19.2.2 릴리스 이전에는 사용할 수 없을 수 있습니다.
각주¶
저자는 이 게시물을 작성할 수 있도록 시간을 지원해 준 IBM에 감사드리고 싶습니다.