Halaman ini menjelaskan cara mengaktifkan port Secure Sockets Layer (SSL) saat men-deploy Extensible Service Proxy V2 (ESPv2) dengan Google Kubernetes Engine, Kubernetes, atau Compute Engine. Anda mungkin ingin mengaktifkan port SSL untuk layanan Endpoints yang di-deploy untuk beberapa kasus penggunaan.
Sebelum memulai, pastikan Anda telah meninjau tutorial untuk jenis layanan dan lingkungan yang Anda pilih, serta mengetahui cara men-deploy ESPv2 tanpa SSL.
Mengonfigurasi kunci dan sertifikat SSL Anda
Untuk mengonfigurasi port SSL Anda agar melayani permintaan HTTPS, ikuti langkah-langkah di bawah ini:
Periksa untuk memastikan bahwa file kunci SSL Anda diberi nama
server.key
dan file sertifikat Anda diberi namaserver.crt
. Untuk pengujian, Anda dapat membuatserver.key
danserver.crt
yang ditandatangani sendiri menggunakan OpenSSL dengan perintah berikut:openssl req -x509 -nodes -days 365 -newkey rsa:2048 \ -keyout ./server.key -out ./server.crt
Tentukan
CN
dansubjectAltName
di sertifikat server Anda. Nilai atribut ini harus cocok dengan DNS atau IP yang digunakan oleh klien untuk memanggil layanan Anda; jika tidak, handshake SSL akan gagal.
Mengaktifkan SSL untuk ESPv2 di Kubernetes
Untuk mengaktifkan port SSL untuk ESPv2 di Kubernetes:
Buat secret Kubernetes dengan kunci dan sertifikat SSL Anda:
kubectl create secret generic esp-ssl \ --from-file=./server.crt --from-file=./server.key
Edit file konfigurasi Kubernetes, misalnya,
echo-ssl.yaml
, seperti yang ditunjukkan dalam cuplikan berikut:Catatan: Contoh konfigurasi menampilkan baris yang perlu diedit. Untuk men-deploy file ke Cloud Endpoints, file konfigurasi lengkap diperlukan.
Pasang secret Kubernetes yang Anda buat sebagai volume, dengan mengikuti petunjuk di halaman Volume Kubernetes.
Mulai ESPv2 seperti yang dijelaskan dalam Menentukan opsi startup untuk ESPv2, tetapi pastikan Anda menambahkan flag startup
--ssl_server_cert_path
untuk menentukan jalur file sertifikat yang terpasang.Mulai layanan dengan file konfigurasi Kubernetes yang telah diupdate menggunakan
kubectl
.kubectl apply -f echo-ssl.yaml
Buat sertifikat root untuk klien menggunakan perintah OpenSSL berikut:
openssl x509 -in ./server.crt -out ./client.pem -outform PEM
Jika klien menggunakan
curl
, fileclient.pem
dapat digunakan dalam flag--caroot
. Untuk gRPC,client.pem
digunakan sebagai file sertifikat root kredensial SSL untuk saluran gRPC.
Memperbarui sertifikat SSL
Penting untuk memperbarui sertifikat SSL Anda secara berkala. Untuk memperbarui sertifikat SSL, Anda harus melakukan langkah-langkah berikut:
- Buat sertifikat baru, seperti yang dijelaskan pada Langkah 1 di atas.
- Pasang sertifikat baru ke secret Kubernetes, seperti yang dijelaskan di Langkah 3 di atas.
- Perbarui deployment Kubernetes ESPv2, seperti yang dijelaskan pada Langkah 5 di atas.
- Buat ulang file sertifikat root klien, seperti yang dijelaskan pada Langkah 6 di atas.
Mengaktifkan SSL untuk ESPv2 di Compute Engine
Untuk mengaktifkan SSL di Compute Engine, salin terlebih dahulu file server.key
dan server.crt
ke folder /etc/nginx/ssl
instance Compute Engine Anda, menggunakan langkah-langkah berikut:
Jalankan perintah berikut dan ganti INSTANCE_NAME dengan nama instance Compute Engine Anda:
gcloud compute scp server.* INSTANCE-NAME
Hubungkan ke instance menggunakan
ssh
.gcloud compute ssh INSTANCE-NAME
Di kotak VM instance, buat direktori dan salin file:
sudo mkdir -p /etc/esp/ssl
sudo cp server.* /etc/esp/ssl/
Ikuti petunjuk untuk jenis layanan Anda guna men-deploy dengan Docker. Saat Anda menjalankan container Docker ESPv2, gunakan perintah ini:
sudo docker run --name=esp \ --detach \ --publish=443:9000 \ --net=esp_net \ --volume=/etc/esp/ssl:/etc/esp/ssl \ gcr.io/endpoints-release/endpoints-runtime:2 \ --service=SERVICE_NAME \ --rollout_strategy=managed \ --backend=echo:8080 \ --ssl_server_cert_path=/etc/esp/ssl \ --listener_port=9000
Jika dibandingkan dengan perintah
docker run
non-SSL, perintah versi SSL membuat konfigurasi yang berbeda. Misalnya, perintah SSL:- Memasang folder dengan file kunci dan CRT ke container menggunakan
--volume
. - Menggunakan
--ssl_server_cert_path=/etc/esp/ssl
untuk memberi tahu ESPv2 agar menemukan file sertifikat serverserver.key
danserver.crt
di folder/etc/esp/ssl
. Mengubah tanda pemetaan port
--publish
. Permintaan masuk ke port HTTPS 443 dipetakan ke port ESPv2 9000.
- Memasang folder dengan file kunci dan CRT ke container menggunakan
Memperbarui sertifikat SSL
Penting untuk memperbarui sertifikat SSL Anda secara berkala. Untuk memperbarui sertifikat SSL, Anda harus melakukan langkah-langkah berikut:
- Buat sertifikat baru dan salin ke instance VM, seperti yang dijelaskan di Langkah 1 di atas.
- Salin sertifikat baru ke direktori
/etc/esp/ssl
, seperti yang dijelaskan pada Langkah 3 di atas. - Hentikan dan mulai ulang container ESPv2 menggunakan perintah
sudo docker run
, seperti yang dijelaskan pada Langkah 4 di atas.
Menguji port SSL
Untuk mempermudah pengujian port SSL, tetapkan variabel lingkungan berikut:
Tetapkan IP_ADDRESS ke alamat IP instance Compute Engine dengan sertifikat SSL baru.
Tetapkan ENDPOINTS_KEY ke kunci API yang valid.
Setelah port SSL diaktifkan, Anda dapat menggunakan HTTPS untuk mengirim permintaan ke
Extensible Service Proxy. Jika sertifikat Anda ditandatangani sendiri,
gunakan -k
untuk mengaktifkan opsi tidak aman di curl
:
curl -k -d '{"message":"hello world"}' -H "content-type:application/json" \ https://IP_ADDRESS:443/echo?key=ENDPOINTS_KEY
Atau, buat sertifikat dalam format pem
dan gunakan opsi --cacert
untuk menggunakan sertifikat yang ditandatangani sendiri di curl
, seperti yang ditunjukkan di bawah:
openssl x509 -in server.crt -out client.pem -outform PEM
curl --cacert "./client.pem" -d '{"message":"hello world"}' -H "content-type:application/json" \ https://IP_ADDRESS:443/echo?key=ENDPOINTS_KEY