6. SDF Container 연동
Composite Container Application 적용 가이드
주의 사항
- 멀티 컨테이너 패턴 참고 자료
- SDF Container가 사용하는 ConfigMap을 해당 업무시스템 namespace에 추가
- cloud-cdf-config.yaml 실행 전 업무시템과 동일한 namespace로 수정
- SKMS_API_URL은 SDF Container가 설치되는 POD에서 통신이 가능해야함
Java 애플리케이션의 프록시 설정
JAVA_TOOL_OPTIONS (Java 전용 설정)
- 이 환경 변수는 JVM(자바 가상 머신)이 시작될 때마다 자동으로 적용되는 시스템 속성(System Properties)을 지정
- 코드 수정 없이 모든 자바 애플리케이션의 동작 방식을 변경할 때 유용
- ConfigMap 환경 변수 추가
JAVA_TOOL_OPTIONS: >
-Dhttp.proxyHost=10.10.12.140 -Dhttp.proxyPort=3128
-Dhttps.proxyHost=10.10.12.140 -Dhttps.proxyPort=3128
-Dhttp.nonProxyHosts=localhost|127.0.0.1|*.svc|*.cluster.local|cloud-skms-service.security365.svc.cluster.local|*.security365.com|security365.com
-Dhttp.proxyHost=10.10.12.140
: 자바 애플리케이션이 HTTP 요청을 보낼 때 사용할 프록시 서버의 IP 주소를 지정-Dhttp.proxyPort=3128
: 위 프록시 서버의 포트 번호를 지정-Dhttps.proxyHost=10.10.12.140
: HTTPS 요청을 보낼 때 사용할 프록시 서버의 IP 주소를 지정-Dhttps.proxyPort=3128
: 위 프록시 서버의 포트 번호를 지정-Dhttp.nonProxyHosts=...
: 프록시를 거치지 않고 직접 통신할 호스트(주소) 목록을 지정
localhost|127.0.0.1
: 내 컴퓨터 자신을 의미*.svc|*.cluster.local
: 쿠버네티스 클러스터 내부 통신 주소*.security365.com|security365.com
: 특정 도메인과 그 하위 도메인- 각 호스트는
|
(파이프) 문자로 구분
자바를 포함한 다양한 시스템 애플리케이션과 라이브러리들이 공통적으로 사용하는 표준 설정
- MIP SDK 프록시 설정(폐쇄망에 구축 시 필요)
- https://learn.microsoft.com/ko-kr/information-protection/develop/concept-mip-proxies
- 리눅스/유닉스 시스템에서 널리 사용되는 표준 방식
- ConfigMap 환경 변수 추가
http_proxy: http://10.10.12.140:3128
https_proxy: http://10.10.12.140:3128
no_proxy: localhost,127.0.0.1,.svc,.cluster.local,cloud-skms-service.security365.svc.cluster.local,.security365.com,security365.com
http_proxy: http://10.10.12.140:3128
: HTTP 트래픽이 거쳐갈 프록시 서버의 주소https-proxy: http://10.10.12.140:3128
: HTTPS 트래픽이 거쳐갈 프록시 서버의 주소no_proxy: ...
: 프록시를 사용하지 않을 예외 주소 목록
- 각 호스트는
,
(쉼표)로 구분- 도메인 전체를 지정할 때
.
(점)으로 시작 (예:.security365.com
)
POD에 사이드카 컨테이너 추가
SDF Container ConfigMap 설정
- cloud-cdf-config.yaml
apiVersion: v1
kind: ConfigMap
metadata:
name: cloud-cdf-config
namespace: dev
data:
## 필수 설정
# [SDF Container 전용] SKMS URL
SKMS_API_URL: "http://cloud-skms-service.dev.svc.cluster.local"
# [SDF Container 전용] 서비스 포트
CONTAINER_LINKER_SERVER_PORT: "8181"
# [SDF Container 전용] 로그 레벨 선택 설정(기본 값 info)
LOG_LEVEL: debug
# =================================================================
## 프록시 설정이 필요하지 않는 경우 관련된 4개의 환경 변수 삭제
## [폐쇄망에 구축 시 SDF Container의 프록시 설정] 프록시 IP, PORT 및 Dhttp.nonProxyHosts 설정은 고객사에 맞게 수정 필요
JAVA_TOOL_OPTIONS: >
-Dhttp.proxyHost=10.10.12.140 -Dhttp.proxyPort=3128
-Dhttps.proxyHost=10.10.12.140 -Dhttps.proxyPort=3128
-Dhttp.nonProxyHosts=localhost|127.0.0.1|*.svc|*.cluster.local|cloud-skms-service.security365.svc.cluster.local|*.security365.com|security365.com
## [폐쇄망에 구축 시 MIP SDK의 프록시 설정] 프록시 IP, PORT 및 no_proxy 설정은 고객사에 맞게 수정 필요
http_proxy: http://10.10.12.140:3128
https_proxy: http://10.10.12.140:3128
no_proxy: localhost,127.0.0.1,.svc,.cluster.local,cloud-skms-service.security365.svc.cluster.local,.security365.com,security365.com
# =================================================================
# [SDF Container 전용] 통합 로그 전송 선택 설정(기본 값 true, false로 설정하는 경우 SDF의 암복호화 로그는 전송하지 않음)
# LOG_SEND_USE: false
# scsl.jar에서 문서 변환 요청 시 원본 문서를 못찾는 증상에 대한 딜레이 설정
# FILE_CONVERT_DELAY: 100
# =================================================================
## 톰캣 접속 설정
# [컨테이너링커 전용] 생성할 수 있는 thread의 총 개수 선택 설정(기본 값 0 → maxThreads : 200)
# TOMCAT_MAX_THREAD: "0"
# [컨테이너링커 전용] 작업큐의 사이즈 선택 설정(기본 값 0 → acceptCount : 100)
# TOMCAT_ACCEPT_COUNT: "0"
# [컨테이너링커 전용] 연결 가능한 connection의 총 개수 선택 설정(기본 값 0 → maxConnections : 8192)
# TOMCAT_MAX_CONNECTIONS: "0"
# =================================================================
## 암복호화 요청 시 RPC(Request/Reply) 패턴 적용 설정 - 큐 생성 실패 시 기존과 같이 SKMS API 호출
# RPC(Request/Reply) 패턴 사용 여부(디폴트 : false)
# CUSTOM_RABBITMQ_USE: true
# RabbitMQ 클러스터의 모든 서버 URL 리스트(콤마로 구분) - ADDRESSES 값이 있을 경우 HOST,PORT는 무시됨
# CUSTOM_RABBITMQ_CLUSTER_ADDRESSES: "security365-rabbitmq-0.dev.svc.cluster.local:5672,security365-rabbitmq-1.dev.svc.cluster.local:5672,security365-rabbitmq-2.dev.svc.cluster.local:5672"
# CUSTOM_RABBITMQ_HOST: "security365-rabbitmq.dev.svc.cluster.local"
# CUSTOM_RABBITMQ_PORT: "5672"
# CUSTOM_RABBITMQ_USERNAME: "security365"
# CUSTOM_RABBITMQ_PASSWORD: "security365"
# =================================================================
SDF Container 추가
- 메인 컨테이너의 Deployment yaml 파일에 사이드카 컨테이너(Security365 SDF Container) 서비스 추가
## 사이트카 컨테이너 설정
- name: cloud-containerlinker-service
image: security365acr.azurecr.io/shieldrm/cloud-containerlinker:latest
imagePullPolicy: IfNotPresent
resources:
requests:
memory: 256Mi
limits:
memory: 512Mi
ports:
- containerPort: 8181
envFrom:
- configMapRef:
name: cloud-cdf-config
securityContext:
allowPrivilegeEscalation: false
readOnlyRootFilesystem: true
capabilities: { drop: ["ALL"] }
volumeMounts:
- name: containerlinker-logs
mountPath: /opt/containerLinker/logs
- name: containerlinker-tmp
mountPath: /tmp
## 공유 디렉토리 PVC 정보
- name: data-cloud-drm-shared
mountPath: /rmswork
- 고객사 업무시스템과 동일한 POD에서 실행되므로 호출 URL은 항상 "http://127.0.0.1:8181" 사용
- 업무시스템과 파일 공유가 가능한 공유 디렉토리(PVC) 마운트 필요
- Deployment yaml 샘플
apiVersion: apps/v1
kind: Deployment
metadata:
name: cloud-ssevtr-service
namespace: dev
labels:
app: cloud-ssevtr-service-label
# namespace: cloud-ss-svc
spec:
replicas: 1
selector:
matchLabels:
app: cloud-ssevtr-service-label
template:
metadata:
labels:
app: cloud-ssevtr-service-label
spec:
containers:
- name: cloud-ssevtr-service
image: scr.softcamp.co.kr/saas/cloud-ss-evtr-svc:latest
imagePullPolicy: IfNotPresent
ports:
- containerPort: 8080
envFrom:
- configMapRef:
name: cloud-ssevtr-config
volumeMounts:
- name: data-cloud-drm-shared
mountPath: /rmswork
resources:
requests:
memory: 2Gi
limits:
memory: 2Gi
##==========================[SDF Container 전용 START]==========================##
- name: cloud-containerlinker-service
image: security365acr.azurecr.io/shieldrm/cloud-containerlinker:latest
imagePullPolicy: IfNotPresent
resources:
requests:
memory: 256Mi
limits:
memory: 512Mi
ports:
- containerPort: 8181
envFrom:
- configMapRef:
name: cloud-cdf-config
securityContext:
allowPrivilegeEscalation: false
readOnlyRootFilesystem: true
capabilities: { drop: ["ALL"] }
volumeMounts:
- name: containerlinker-logs
mountPath: /opt/containerLinker/logs
- name: containerlinker-tmp
mountPath: /tmp
## 공유 디렉토리 PVC 정보
- name: data-cloud-drm-shared
mountPath: /rmswork
##==========================[SDF Container 전용 END]==========================##
volumes:
- name: data-cloud-drm-shared
persistentVolumeClaim:
claimName: data-cloud-drm-shared
imagePullSecrets:
- name: security365acr