Halaman ini menjelaskan cara menggunakan adaptor DICOM Cloud Healthcare API open source di Google Kubernetes Engine (GKE) untuk menyelesaikan tugas berikut:
- Menghubungkan Gambar Pengarsipan dan Sistem Komunikasi (PACS) ke Cloud Healthcare API.
- Mengimpor data DICOM dari PACS ke penyimpanan DICOM di Cloud Healthcare API.
Panduan ini memberikan cara sederhana untuk menyiapkan prototipe menggunakan Google Kubernetes Engine dan virtual machine (VM) Compute Engine. VM Compute Engine menyimulasikan PACS lokal. Untuk informasi lebih detail, lihat README adaptor DICOM.
Ringkasan adaptor DICOM
Adaptor terdiri dari dua komponen utama: adaptor impor dan adaptor ekspor. Panduan ini menunjukkan cara menggunakan adaptor impor untuk menyimpan gambar DICOM di penyimpanan DICOM.
Gunakan adaptor DICOM untuk menerjemahkan data antara protokol tradisional dan protokol RESTful. Misalnya, Anda dapat menerjemahkan dari format C-STORE ke format STOW-RS.
Biaya
Panduan ini menggunakan komponen Google Cloud yang dapat ditagih, termasuk hal berikut:
- Cloud Healthcare API
- Google Kubernetes Engine
- Compute Engine
Gunakan Kalkulator Harga untuk membuat perkiraan biaya berdasarkan penggunaan yang Anda proyeksikan. Pengguna Cloud Platform baru mungkin memenuhi syarat untuk mendapatkan uji coba gratis.
Sebelum memulai
- Sign in to your Google Cloud account. If you're new to Google Cloud, create an account to evaluate how our products perform in real-world scenarios. New customers also get $300 in free credits to run, test, and deploy workloads.
-
Di konsol Google Cloud, pada halaman pemilih project, pilih atau buat project Google Cloud.
-
Make sure that billing is enabled for your Google Cloud project.
-
Aktifkan API Cloud Healthcare API, Google Kubernetes Engine, and Container Registry.
-
Di konsol Google Cloud, pada halaman pemilih project, pilih atau buat project Google Cloud.
-
Make sure that billing is enabled for your Google Cloud project.
-
Aktifkan API Cloud Healthcare API, Google Kubernetes Engine, and Container Registry.
- Tunggu sampai GKE API dan layanan terkait diaktifkan. Proses ini dapat memerlukan waktu beberapa menit.
- Buat penyimpanan DICOM jika Anda belum melakukannya.
Memilih shell
Untuk menyelesaikan panduan ini, gunakan Cloud Shell atau shell lokal Anda.
Cloud Shell adalah lingkungan shell untuk mengelola resource yang dihosting di Google Cloud. Cloud Shell dilengkapi dengan alat berikut, yang dapat Anda gunakan dalam panduan ini:
- gcloud CLI: menyediakan antarmuka command line utama untuk Google Cloud
kubectl
: menyediakan antarmuka command line untuk menjalankan perintah pada cluster GKE
Untuk membuka Cloud Shell atau mengonfigurasi shell lokal Anda, lakukan langkah-langkah berikut:
Cloud Shell
Buka Konsol Google Cloud.
Dari pojok kanan atas konsol, klik tombol Activate Google Cloud Shell:
Sesi Cloud Shell akan terbuka di dalam frame di bagian bawah konsol. Anda
menggunakan shell ini untuk menjalankan perintah gcloud
dan kubectl
.
Shell lokal
Jika lebih suka menggunakan shell lokal, Anda harus menginstal gcloud CLI. Lihat Menginstal Google Cloud CLI untuk mengetahui petunjuknya.
Men-deploy adaptor menggunakan Google Kubernetes Engine
Adaptor impor dan adaptor ekspor adalah aplikasi dalam container yang disiapkan dalam image Docker yang telah dibangun di Container Registry. Dalam panduan ini, Anda akan men-deploy image dicom-import-adapter
untuk dijalankan di cluster GKE.
Memberikan izin akun layanan Compute Engine
Ikuti petunjuk dalam Membuat dan mengaktifkan akun layanan untuk instance untuk memberikan peran roles/healthcare.dicomEditor
kepada akun layanan default Compute Engine. Untuk mengetahui informasi selengkapnya, lihat
Peran penyimpanan DICOM.
Membuat cluster
gcloud
Untuk membuat cluster di GKE bernama dicom-adapter
, jalankan perintah gcloud container clusters create
.
Sebelum menggunakan salah satu data perintah di bawah, lakukan penggantian berikut:
- COMPUTE_ZONE: zona tempat cluster Anda di-deploy. Zona adalah perkiraan lokasi regional tempat cluster Anda dan resource-nya di-deploy. Misalnya,
us-west1-a
adalah zona di regionus-west
. Jika Anda telah menetapkan zona default menggunakan perintahgcloud config set compute/zone
, nilai flag dalam perintah sebelumnya akan menggantikan nilai default.
Jalankan perintah berikut:
Linux, macOS, atau Cloud Shell
gcloud container clusters create dicom-adapter \ --zone=COMPUTE_ZONE \ --scopes=https://www.googleapis.com/auth/cloud-healthcare
Windows (PowerShell)
gcloud container clusters create dicom-adapter ` --zone=COMPUTE_ZONE ` --scopes=https://www.googleapis.com/auth/cloud-healthcare
Windows (cmd.exe)
gcloud container clusters create dicom-adapter ^ --zone=COMPUTE_ZONE ^ --scopes=https://www.googleapis.com/auth/cloud-healthcare
Anda akan melihat respons seperti berikut:
Creating cluster dicom-adapter in COMPUTE_ZONE... Cluster is being health-checked (master is healthy)...done. Created [https://container.googleapis.com/v1/projects/PROJECT_ID/zones/COMPUTE_ZONE/clusters/dicom-adapter]. To inspect the contents of your cluster, go to: https://console.cloud.google.com/kubernetes/workload_/gcloud/COMPUTE_ZONE/dicom-adapter?project=PROJECT_ID kubeconfig entry generated for dicom-adapter. NAME LOCATION MASTER_VERSION MASTER_IP MACHINE_TYPE NODE_VERSION NUM_NODES STATUS dicom-adapter COMPUTE_ZONE 1.18.16-gke.502 123.456.789.012 n1-standard-1 1.18.16-gke.502 3 RUNNING
Mengonfigurasi Deployment
Saat men-deploy aplikasi ke GKE, Anda menentukan properti Deployment menggunakan file manifes Deployment, yang biasanya berupa file YAML. Untuk mengetahui informasi tentang file manifes Deployment, lihat Membuat Deployment.
Dengan menggunakan editor teks, buat file manifes Deployment untuk adaptor impor bernama dicom_adapter.yaml
dengan konten berikut:
apiVersion: apps/v1 kind: Deployment metadata: name: dicom-adapter spec: replicas: 1 selector: matchLabels: app: dicom-adapter template: metadata: labels: app: dicom-adapter spec: containers: - name: dicom-import-adapter image: gcr.io/cloud-healthcare-containers/healthcare-api-dicom-dicomweb-adapter-import:0.2.43 ports: - containerPort: 2575 protocol: TCP name: "port" args: - "--dimse_aet=IMPORTADAPTER" - "--dimse_port=2575" - "--dicomweb_address=https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/dicomStores/DICOM_STORE_ID/dicomWeb"
Ganti kode berikut:
- PROJECT_ID: ID project
- LOCATION: lokasi set data
- DATASET_ID: ID untuk set data induk penyimpanan DICOM Anda
- DICOM_STORE_ID: ID untuk penyimpanan DICOM tempat Anda mengimpor data DICOM
Mengonfigurasi Layanan
Agar adaptor DICOM dapat diakses oleh aplikasi di luar cluster GKE (seperti PACS), Anda harus mengonfigurasi load balancer internal. Dengan load balancer, Anda dapat mengekspos port DIMSE secara internal (dalam panduan ini, port 2575).
Buat file manifes Service untuk mengonfigurasi load balancing.
Di direktori tempat Anda membuat file manifes Deployment, gunakan editor teks untuk membuat file bernama dicom_adapter_load_balancer.yaml
dengan konten berikut. Anda membuat dan men-deploy file manifes Layanan di bagian Men-deploy Layanan dan load balancer internal.
apiVersion: v1
kind: Service
metadata:
name: dicom-adapter-load-balancer
# The "Internal" annotation will result in an load balancer that can only
# be accessed from within the VPC the Kubernetes cluster is in.
# You can remove this annotation to get an externally accessible load balancer.
annotations:
cloud.google.com/load-balancer-type: "Internal"
spec:
ports:
- port: 2575
targetPort: 2575
protocol: TCP
name: port
selector:
app: dicom-adapter
type: LoadBalancer
Men-deploy Deployment
Untuk men-deploy adaptor ke cluster GKE, jalankan perintah berikut di direktori yang berisi file manifes Deployment dicom_adapter.yaml
:
kubectl apply -f dicom_adapter.yaml
Output-nya adalah sebagai berikut:
deployment.apps/dicom-adapter created
Memeriksa Deployment
Setelah Anda membuat Deployment, gunakan alat kubectl
untuk memeriksanya.
Untuk mendapatkan informasi mendetail tentang Deployment, jalankan perintah berikut:
kubectl describe deployment dicom-adapter
Untuk melihat Pod yang dibuat oleh Deployment, jalankan perintah berikut:
kubectl get pods -l app=dicom-adapter
Untuk mendapatkan informasi tentang Pod yang dibuat, jalankan perintah berikut menggunakan nama Pod yang ditampilkan dari perintah sebelumnya:
kubectl describe pod POD_NAME
Jika Deployment berhasil, bagian terakhir output dari perintah sebelumnya berisi informasi berikut. Adaptor siap menayangkan
permintaan jika penampung dicom-import-adapter
memiliki nilai Started
di kolom Reason
.
Events:
Type Reason Age From Message
---- ------ ---- ---- -------
Normal Scheduled 3m33s default-scheduler Successfully assigned default/dicom-adapter-69d579778-qrm7n to gke-dicom-adapter-default-pool-6f6e0dcd-9cdd
Normal Pulling 3m31s kubelet, gke-dicom-adapter-default-pool-6f6e0dcd-9cdd Pulling image "gcr.io/cloud-healthcare-containers/healthcare-api-dicom-dicomweb-adapter-import:0.2.43"
Normal Pulled 3m10s kubelet, gke-dicom-adapter-default-pool-6f6e0dcd-9cdd Successfully pulled image "gcr.io/cloud-healthcare-containers/healthcare-api-dicom-dicomweb-adapter-import:0.2.43"
Normal Created 3m7s kubelet, gke-dicom-adapter-default-pool-6f6e0dcd-9cdd Created container dicom-import-adapter
Normal Started 3m7s kubelet, gke-dicom-adapter-default-pool-6f6e0dcd-9cdd Started container dicom-import-adapter
Men-deploy Layanan dan load balancer internal
Untuk membuat load balancer internal, jalankan perintah berikut di direktori yang berisi file manifes Layanan dicom_adapter_load_balancer.yaml
:
kubectl apply -f dicom_adapter_load_balancer.yaml
Output-nya adalah sebagai berikut:
service/dicom-adapter-load-balancer created
Memeriksa Layanan
Setelah membuat Layanan, periksa untuk memverifikasi bahwa layanan telah dikonfigurasi dengan benar.
Untuk memeriksa load balancer, jalankan perintah berikut:
kubectl describe service dicom-adapter-load-balancer
Output-nya adalah sebagai berikut:
Name: dicom-adapter-load-balancer
Namespace: default
Labels: <none>
Annotations: cloud.google.com/load-balancer-type: Internal
Selector: app=dicom-adapter
Type: LoadBalancer
IP: 198.51.100.1
LoadBalancer Ingress: 203.0.113.1
Port: port 2575/TCP
TargetPort: 2575/TCP
NodePort: port 30440/TCP
Endpoints: 192.0.2.1:2575
Session Affinity: None
External Traffic Policy: Cluster
Events:
Events:
Type Reason Age From Message
---- ------ ---- ---- -------
Normal EnsuringLoadBalancer 1m service-controller Ensuring load balancer
Normal EnsuredLoadBalancer 1m service-controller Ensured load balancer
Pengisian alamat IP LoadBalancer Ingress
mungkin memerlukan waktu hingga satu menit.
Simpan alamat IP LoadBalancer Ingress
. Anda akan menggunakannya untuk mengakses Layanan dari luar cluster di bagian berikutnya.
Membuat virtual machine Compute Engine
Untuk menyimulasikan PACS lokal, buat VM Compute Engine untuk mengirim permintaan ke adaptor DICOM. Karena Anda men-deploy load balancer internal, VM yang Anda buat dan cluster GKE yang ada harus berada di region yang sama dan menggunakan jaringan VPC yang sama.
Selesaikan langkah-langkah berikut untuk membuat instance virtual machine Linux di Compute Engine:
Konsol
Di Konsol Google Cloud, buka halaman VM Instances.
Klik Create instance.
Pilih Region dan Zone untuk instance yang cocok dengan zona yang Anda pilih saat membuat cluster. Misalnya, jika Anda menggunakan
us-central1-a
untuk COMPUTE_ZONE saat membuat cluster, pilihus-central1 (Iowa)
untuk Region danus-central1-a
untuk Zone.Di bagian Boot disk, klik Change untuk mengonfigurasi boot disk Anda.
Pada tab Gambar publik, pilih versi 9 sistem operasi Debian.
Klik Select.
Di bagian Firewall, pilih Allow HTTP traffic.
Klik Create untuk membuat instance.
gcloud
Jalankan perintah gcloud compute instances create
. Perintah ini menggunakan tag http-server
untuk mengizinkan traffic HTTP.
Sebelum menggunakan salah satu data perintah di bawah, lakukan penggantian berikut:
- PROJECT_ID: ID project Google Cloud Anda
- COMPUTE_ZONE: zona yang Anda pilih saat membuat cluster
- INSTANCE_NAME: nama VM
Jalankan perintah berikut:
Linux, macOS, atau Cloud Shell
gcloud compute instances create INSTANCE_NAME \ --project=PROJECT_ID \ --zone=COMPUTE_ZONE \ --image-family=debian-9 \ --image-project=debian-cloud \ --tags=http-server
Windows (PowerShell)
gcloud compute instances create INSTANCE_NAME ` --project=PROJECT_ID ` --zone=COMPUTE_ZONE ` --image-family=debian-9 ` --image-project=debian-cloud ` --tags=http-server
Windows (cmd.exe)
gcloud compute instances create INSTANCE_NAME ^ --project=PROJECT_ID ^ --zone=COMPUTE_ZONE ^ --image-family=debian-9 ^ --image-project=debian-cloud ^ --tags=http-server
Anda akan melihat respons seperti berikut:
Created [https://www.googleapis.com/compute/v1/projects/PROJECT_ID/zones/COMPUTE_ZONE/instances/INSTANCE_NAME]. NAME ZONE MACHINE_TYPE PREEMPTIBLE INTERNAL_IP EXTERNAL_IP STATUS INSTANCE_NAME COMPUTE_ZONE n1-standard-1 INTERNAL_IP EXTERNAL_IP RUNNING
Tunggu hingga instance memulai. Setelah dimulai, instance akan tercantum di halaman Instance VM dengan ikon status hijau.
Menghubungkan ke VM
Untuk terhubung ke VM, selesaikan langkah-langkah berikut:
Konsol
Di Konsol Google Cloud, buka halaman VM Instances.
Dalam daftar instance virtual machine, klik SSH di baris instance yang telah dibuat.
gcloud
Jalankan perintah gcloud compute ssh
.
Sebelum menggunakan salah satu data perintah di bawah, lakukan penggantian berikut:
Jalankan perintah berikut:
Linux, macOS, atau Cloud Shell
gcloud compute ssh INSTANCE_NAME \ --project PROJECT_ID \ --zone COMPUTE_ZONE
Windows (PowerShell)
gcloud compute ssh INSTANCE_NAME ` --project PROJECT_ID ` --zone COMPUTE_ZONE
Windows (cmd.exe)
gcloud compute ssh INSTANCE_NAME ^ --project PROJECT_ID ^ --zone COMPUTE_ZONE
Sekarang Anda memiliki jendela terminal untuk berinteraksi dengan instance Linux.
Mengimpor gambar DICOM ke penyimpanan DICOM
Ada beberapa opsi software yang tersedia yang dapat Anda gunakan untuk mengirim image DICOM melalui jaringan. Di bagian berikut, Anda menggunakan toolkit DICOM DCMTK.
Untuk mengimpor gambar DICOM ke penyimpanan DICOM, selesaikan langkah-langkah berikut dari VM yang Anda buat di bagian sebelumnya:
Instal perangkat lunak toolkit DICOM DCMTK:
sudo apt-get install -y dcmtk
Simpan image DICOM ke VM. Misalnya, jika image DICOM disimpan di bucket Cloud Storage, jalankan perintah berikut untuk mendownloadnya ke direktori kerja Anda saat ini:
gsutil cp gs://BUCKET/DCM_FILE .
Untuk menggunakan image DICOM yang disediakan secara gratis oleh Google Cloud dari set data
gcs-public-data--healthcare-tcia-lidc-idri
, jalankan perintah berikut:gsutil -u PROJECT_ID cp gs://gcs-public-data--healthcare-tcia-lidc-idri/dicom/1.3.6.1.4.1.14519.5.2.1.6279.6001.100036212881370097961774473021/1.3.6.1.4.1.14519.5.2.1.6279.6001.130765375502800983459674173881/1.3.6.1.4.1.14519.5.2.1.6279.6001.100395847981751414562031366859.dcm .
Jalankan perintah
dcmsend
, yang tersedia melalui toolkit DICOM DCMTK. Saat Anda menjalankan perintah tersebut, tetapkan Judul Entitas Aplikasi (AE) keIMPORTADAPTER
. Anda juga dapat menambahkan flag--verbose
untuk menampilkan detail pemrosesan. Port yang digunakan dalam panduan ini adalah 2575.dcmsend --verbose PEER 2575 DCM_FILE_IN -aec IMPORTADAPTER
Ganti kode berikut:
- PEER: Alamat IP
LoadBalancer Ingress
yang ditampilkan saat Anda memeriksa Layanan - DCMFILE_IN: jalur ke image DICOM pada VM
Saat menjalankan
dcmsend
dengan satu image DICOM, output-nya adalah sebagai berikut:I: checking input files ... I: starting association #1 I: initializing network ... I: negotiating network association ... I: Requesting Association I: Association Accepted (Max Send PDV: 16366) I: sending SOP instances ... I: Sending C-STORE Request (MsgID 1, MR) I: Received C-STORE Response (Success) I: Releasing Association I: I: Status Summary I: -------------- I: Number of associations : 1 I: Number of pres. contexts : 1 I: Number of SOP instances : 1 I: - sent to the peer : 1 I: * with status SUCCESS : 1
- PEER: Alamat IP
Untuk memverifikasi bahwa image DICOM berhasil diimpor ke penyimpanan DICOM Anda. telusuri instance di penyimpanan DICOM dan pastikan image DICOM baru ada di penyimpanan.
Setelah menyelesaikan bagian ini, Anda telah berhasil men-deploy adaptor DICOM ke GKE dan mengirim image DICOM dari instance PACS melalui adaptor ke Cloud Healthcare API.
Memecahkan masalah
Pemecahan masalah GKE
Jika adaptor DICOM mengalami kegagalan setelah Anda men-deploy-nya ke GKE, ikuti langkah-langkah dalam Memecahkan masalah terkait workload yang di-deploy.
Pemecahan masalah adaptor
Adaptor impor dan ekspor menghasilkan log yang dapat Anda gunakan untuk mendiagnosis masalah apa pun. Saat Anda menjalankan adaptor menggunakan GKE, log
disimpan di Cloud Logging. Untuk melihat log, selesaikan langkah-langkah berikut menggunakan Konsol Google Cloud atau alat kubectl
:
Konsol
Buka dasbor GKE Workloads di Konsol Google Cloud.
Pilih beban kerja
dicom-adapter
.Di halaman Detail deployment, klik Log container.
kubectl
Untuk melihat semua Pod yang berjalan di cluster Anda, jalankan perintah berikut:
kubectl get pods
Cari Pod yang namanya diawali dengan dicom-adapter
.
Untuk mendapatkan log Pod, jalankan perintah berikut:
kubectl logs POD_NAME
Jika Anda melewatkan salah satu langkah dalam panduan ini, perintah dcmsend
mungkin gagal
mengupload gambar. Untuk menyelidiki masalah ini, jalankan kembali perintah dengan flag -d
(untuk "debug"). Tanda ini mencetak log tindakan yang lebih panjang,
termasuk pesan yang memberikan informasi tentang kegagalan.
Pemecahan masalah izin dan otorisasi
Bagian berikut menjelaskan error yang dapat terjadi di dcmsend
saat izin atau otorisasi
dikonfigurasi dengan tidak benar.
Error pengaitan yang dibatalkan oleh rekan sejawat
Masalah berikut terjadi saat traffic jaringan tidak dapat mengalir dari PACS ke port 2575 load balancer:
cannot send SOP instance: Peer aborted Association (or never connected)
Untuk mengatasi masalah ini, pastikan VM PACS dan cluster GKE berjalan di jaringan VPC yang sama. Jika tidak berjalan di jaringan VPC yang sama, periksa hal-hal berikut ini:
- Load balancer tidak dikonfigurasi sebagai "internal".
- Tidak ada aturan firewall yang memblokir koneksi ke port 2575.
Error ini juga dapat terjadi jika layanan load balancer atau Pod adaptor tidak disiapkan dengan benar di cluster GKE. Untuk memastikan semuanya disiapkan dengan benar, tinjau Memeriksa Deployment dan Memeriksa Layanan dalam panduan ini.
Error API yang diperlukan tidak diaktifkan
Masalah berikut terjadi jika Cloud Healthcare API belum diaktifkan di project tempat cluster GKE dengan adaptor berjalan:
LO [Http_403, PERMISSION_DENIED, Cloud Healthcare API has not been u]
Untuk mengatasi masalah ini, pastikan semua API yang diperlukan telah diaktifkan dengan mengikuti petunjuk di Sebelum memulai.
Error cakupan tidak memadai
Masalah berikut terjadi saat cluster GKE tempat adaptor dijalankan tidak menetapkan nilai cakupan yang benar:
LO [Http_403, PERMISSION_DENIED, Request had insufficient authentica]
Untuk mengatasi masalah ini, update cluster GKE atau buat cluster baru dengan flag berikut:
--scopes=https://www.googleapis.com/auth/cloud-healthcare
Error izin penyimpanan DICOM ditolak
Error berikut terjadi jika akun layanan yang digunakan oleh cluster GKE tempat adaptor dijalankan tidak memiliki peran roles/healthcare.dicomEditor
:
LO [Http_403, PERMISSION_DENIED, Permission healthcare.dicomStores.d]
Untuk mengatasi masalah ini, ikuti petunjuk dalam artikel Memberikan izin akun layanan Compute Engine.
Langkah selanjutnya
Setelah mengonfigurasi prototipe dalam panduan ini, Anda dapat mulai menggunakan Cloud VPN untuk mengenkripsi traffic antara PAS Anda dan Cloud Healthcare API.