Halaman ini menunjukkan cara menggunakan objek Ingress untuk membuat load balancer eksternal dengan sertifikat SSL yang dikelola Google. Sertifikat ini adalah sertifikat Validasi Domain (DV) yang disediakan, diperpanjang, dan dikelola oleh Google untuk nama domain Anda. Sertifikat ini tidak mendemonstrasikan identitas individu atau organisasi Anda.
Untuk mempelajari cara membuat sertifikat yang dikelola Google dengan Google Cloud, silakan melihat Sertifikat yang dikelola Google.
Sertifikat SSL GKE yang dikelola Google mendukung cluster publik dan pribadi.
Membuat Ingress dengan sertifikat yang dikelola Google
Untuk mengonfigurasi sertifikat SSL yang dikelola Google dan mengaitkannya dengan Ingress, Anda harus:
- Membuat objek
ManagedCertificate
dalam namespace yang sama dengan Ingress. - Mengaitkan objek
ManagedCertificate
ke Ingress dengan menambahkan anotasinetworking.gke.io/managed-certificates
ke Ingress. Anotasi ini adalah daftar objekManagedCertificate
yang dipisahkan koma.
Batasan
Sertifikat yang dikelola Google kurang fleksibel jika dibandingkan dengan sertifikat yang Anda dapatkan dan kelola sendiri. Sertifikat yang dikelola Google mendukung hingga 100 domain non-karakter pengganti. Tidak seperti sertifikat yang dikelola sendiri, sertifikat yang dikelola Google tidak mendukung domain karakter pengganti.
Jika Anda memerlukan sertifikat yang dikelola sendiri atau jika sudah memiliki sertifikat SSL yang ingin dikonfigurasi di Ingress, silakan melihat Menyiapkan HTTPS (TLS) antara klien dan load balancer.
Jumlah dan jenis sertifikat yang didukung oleh Ingress ditentukan oleh batas sertifikat SSL yang dikelola Google.
Memperbarui sertifikat yang dikelola Google tidak didukung. Untuk mengetahui informasi selengkapnya, silakan melihat Memperbarui sertifikat yang dikelola Google secara manual.
Jika sertifikat dicabut secara langsung dengan Certificate Authority, Google tidak akan merotasi sertifikat tersebut secara otomatis. Anda harus menghapus ManagedCertificate dan membuat yang baru.
Prasyarat
- Anda harus memiliki nama domain tersebut. Nama domain tidak boleh lebih dari 63 karakter. Anda dapat menggunakan Google Domains atau registrar lainnya.
- Jika Anda menggunakan cluster GKE Standard, add-on
HttpLoadBalancing
harus diaktifkan. ingressClassName
Anda harus"gce"
.- Anda harus menerapkan resource
Ingress
danManagedCertificate
dalam project dan namespace yang sama. Buat alamat IP eksternal yang dipesan (statis). Melakukan reservasi alamat IP statis akan memastikan alamat IP tersebut tetap milik Anda, meskipun Anda menghapus Ingress. Jika Anda tidak mencadangkan alamat IP, alamat IP mungkin berubah, sehingga Anda harus mengonfigurasi ulang data DNS domain. Gunakan Google Cloud CLI atau Konsol Google Cloud untuk membuat alamat IP yang dipesan.
gcloud
Untuk membuat alamat IP yang dipesan, jalankan perintah berikut:
gcloud compute addresses create ADDRESS_NAME --global
Ganti
ADDRESS_NAME
dengan nama alamat IP yang dipesan yang sedang Anda buat.Untuk menemukan alamat IP statis yang Anda buat, jalankan perintah berikut:
gcloud compute addresses describe ADDRESS_NAME --global
Outputnya mirip dengan hal berikut ini:
address: 203.0.113.32 ...
Konsol
Untuk membuat alamat IP yang dipesan, lakukan langkah-langkah berikut:
Buka halaman Alamat IP eksternal di Konsol Google Cloud.
Tentukan nama untuk alamat IP (misalnya,
example-ip-address
).Tentukan apakah Anda menginginkan alamat IPv4 atau IPv6.
Pilih opsi Global untuk Jenis.
Klik Pesan. Alamat IP tersebut akan tercantum di kolom Alamat Eksternal.
Config Connector
Catatan: Langkah ini memerlukan Config Connector. Ikuti petunjuk penginstalan untuk menginstal Config Connector di cluster Anda.
Untuk men-deploy manifes ini, download ke komputer Anda sebagaicompute-address.yaml
, lalu jalankan:kubectl apply -f compute-address.yaml
Menyiapkan sertifikat yang dikelola Google
Membuat objek
ManagedCertificate
. Resource ini menentukan domain untuk sertifikat SSL. Domain karakter pengganti tidak didukung.Manifes berikut menjelaskan objek
ManagedCertificate
. Simpan manifes sebagaimanaged-cert.yaml
.apiVersion: networking.gke.io/v1 kind: ManagedCertificate metadata: name: managed-cert spec: domains: - FQDN_1 - FQDN_2
Ganti kode berikut:
FQDN_1
,FQDN_2
: nama domain yang sepenuhnya memenuhi syarat (FQDN) milik Anda. Misalnya,example.com
danwww.example.com
.
Terapkan manifes ke cluster Anda:
kubectl apply -f managed-cert.yaml
Buat Layanan jenis
NodePort
untuk mengekspos aplikasi Anda ke internet.Manifes berikut menjelaskan Layanan jenis
NodePort
. Simpan manifes sebagaimc-service.yaml
.apiVersion: v1 kind: Service metadata: name: mc-service spec: selector: app: mc-service type: NodePort ports: - protocol: TCP port: 80 targetPort: 8080
Terapkan manifes ke cluster Anda:
kubectl apply -f mc-service.yaml
Membuat Ingress.
Manifes berikut menjelaskan Ingress yang menggunakan
ManagedCertificate
yang Anda buat. Simpan manifes sebagaimanaged-cert-ingress.yaml
.apiVersion: networking.k8s.io/v1 kind: Ingress metadata: name: managed-cert-ingress annotations: kubernetes.io/ingress.global-static-ip-name: ADDRESS_NAME networking.gke.io/managed-certificates: managed-cert ingressClassName: "gce" spec: defaultBackend: service: name: mc-service port: number: SERVICE_PORT
Ganti kode berikut:
ADDRESS_NAME
: nama alamat IP yang dipesan.SERVICE_PORT
: nilaiports.port
dalam Manifes layanan Anda.
Terapkan manifes ke cluster Anda:
kubectl apply -f managed-cert-ingress.yaml
Dapatkan alamat IP load balancer:
kubectl get ingress
Outputnya mirip dengan yang berikut ini:
NAME HOSTS ADDRESS PORTS AGE managed-cert-ingress * 203.0.113.32 80 54s
Alamat IP load balancer tercantum di kolom
ADDRESS
. Jika Anda menggunakan alamat IP statis yang dipesan, alamat IP tersebut akan menjadi alamat load balancer.Jika alamat tidak tercantum, tunggu sampai Ingress menyelesaikan penyiapan.
Konfigurasikan data DNS untuk domain Anda agar mengarah ke alamat IP load balancer. Jika Anda menggunakan Cloud DNS, silakan melihat Mengelola data untuk mengetahui detailnya.
Tunggu hingga penyediaan sertifikat yang dikelola Google selesai. Proses ini mungkin memerlukan waktu hingga 60 menit. Anda dapat memeriksa status sertifikat menggunakan perintah berikut:
kubectl describe managedcertificate managed-cert
Outputnya mirip dengan yang berikut ini:
Name: managed-cert Namespace: default Labels: <none> Annotations: <none> API Version: networking.gke.io/v1 Kind: ManagedCertificate (...) Spec: Domains: FQDN_1 FQDN_2 Status: CertificateStatus: Active (...)
Nilai kolom
Status.CertificateStatus
menunjukkan bahwa sertifikat telah disediakan. JikaStatus.CertificateStatus
bukanActive
, sertifikat belum disediakan.Anda dapat memeriksa peristiwa di Ingress menggunakan perintah berikut:
kubectl describe ingress INGRESS_NAME
Ganti
INGRESS_NAME
dengan nama Ingress Anda.Pastikan SSL berfungsi dengan mengunjungi domain Anda menggunakan awalan
https://
. Browser Anda menunjukkan bahwa koneksi aman dan Anda dapat melihat detail sertifikat.
Bermigrasi ke sertifikat yang dikelola Google dari sertifikat yang dikelola sendiri
Saat Anda memigrasikan Ingress dari penggunaan sertifikat SSL yang dikelola sendiri ke sertifikat SSL yang dikelola Google, jangan hapus sertifikat SSL yang dikelola sendiri sebelum sertifikat SSL yang dikelola Google aktif. Setelah sertifikat SSL yang dikelola Google berhasil disediakan, sertifikat tersebut akan otomatis aktif. Saat sertifikat SSL yang dikelola Google aktif, Anda dapat menghapus sertifikat SSL yang dikelola sendiri.
Gunakan petunjuk ini untuk bermigrasi dari sertifikat SSL yang dikelola sendiri ke sertifikat SSL yang dikelola Google.
- Tambahkan sertifikat baru yang dikelola Google ke Ingress, seperti yang dijelaskan di bagian Menyiapkan sertifikat yang dikelola Google.
Tunggu hingga status resource sertifikat yang dikelola Google menjadi Aktif. Periksa status sertifikat dengan perintah berikut:
kubectl describe managedcertificate managed-cert
Jika statusnya adalah
Active
, perbarui Ingress untuk menghapus referensi ke sertifikat yang dikelola sendiri.
Menghapus sertifikat yang dikelola Google
Untuk menghapus sertifikat yang dikelola Google dari cluster, Anda harus menghapus
objek ManagedCertificate
dan menghapus anotasi Ingress yang mereferensikannya
itu.
Hapus objek
ManagedCertificate
:kubectl delete -f managed-cert.yaml
Outputnya mirip dengan hal berikut ini:
managedcertificate.networking.gke.io "managed-cert" deleted
Hapus anotasi dari Ingress:
kubectl annotate ingress managed-cert-ingress networking.gke.io/managed-certificates-
Perhatikan tanda minus,
-
, di akhir perintah.Rilis alamat IP statis yang Anda pesan untuk load balancer.
Anda dapat menggunakan Google Cloud CLI, Konsol Google Cloud, atau Config Connector untuk merilis alamat IP yang dipesan.
gcloud
Gunakan perintah berikut untuk merilis alamat IP yang dipesan:
gcloud compute addresses delete ADDRESS_NAME --global
Ganti
ADDRESS_NAME
dengan nama alamat IP.Konsol
Untuk merilis alamat IP yang dipesan, lakukan langkah-langkah berikut:
Buka halaman Alamat IP eksternal di Konsol Google Cloud.
Pilih kotak centang di samping alamat IP yang ingin Anda rilis.
Klik Rilis alamat IP.
Config Connector
Catatan: Langkah ini memerlukan Config Connector. Ikuti petunjuk penginstalan untuk menginstal Config Connector di cluster Anda.
Untuk men-deploy manifes ini, download ke komputer Anda sebagai
compute-address.yaml
, lalu jalankan:kubectl delete -f compute-address.yaml
Pemecahan masalah
Bagian ini memberikan informasi tentang cara menyelesaikan masalah pada sertifikat yang dikelola Google.
Memeriksa peristiwa di ManagedCertificate
dan resource Ingress
Jika Anda melebihi jumlah sertifikat yang diizinkan, peristiwa dengan
alasan TooManyCertificates
akan ditambahkan ke ManagedCertificate
. Anda dapat memeriksa peristiwa pada objek ManagedCertificate
menggunakan perintah berikut:
kubectl describe managedcertificate CERTIFICATE_NAME
Ganti CERTIFICATE_NAME
dengan nama ManagedCertificate
Anda.
Jika Anda memasang ManagedCertificate
yang tidak ada ke Ingress, peristiwa
dengan alasan MissingCertificate
akan ditambahkan ke Ingress. Anda dapat memeriksa
peristiwa di Ingress menggunakan perintah berikut:
kubectl describe ingress INGRESS_NAME
Ganti INGRESS_NAME
dengan nama Ingress Anda.
Sertifikat terkelola tidak disediakan saat domain me-resolve ke alamat IP dari beberapa load balancer
Saat domain Anda me-resolve ke alamat IP dari beberapa load balancer (beberapa objek Ingress), Anda harus membuat satu objek ManagedCertificate
dan memasangnya ke semua objek Ingress. Jika Anda membuat banyak
objek ManagedCertificate
dan melampirkan masing-masing objek tersebut ke Ingress yang terpisah, Certificate Authority mungkin tidak dapat memverifikasi kepemilikan domain Anda
dan beberapa sertifikat mungkin tidak akan disediakan. Agar verifikasi berhasil, sertifikat harus terlihat pada semua alamat IP yang menjadi tujuan resolve domain Anda.
Khususnya, saat domain Anda me-resolve ke alamat IPv4 dan IPv6 yang
dikonfigurasi dengan objek Ingress yang berbeda, Anda harus membuat satu objek
ManagedCertificate
dan memasangnya ke kedua Ingress tersebut.
Komunikasi terganggu antara sertifikat yang dikelola Google dan Ingress
Sertifikat terkelola berkomunikasi dengan Ingress menggunakan
anotasi ingress.gcp.kubernetes.io/pre-shared-cert
. Anda dapat mengganggu komunikasi ini
jika Anda, misalnya:
- Menjalankan proses otomatis yang menghapus anotasi
ingress.gcp.kubernetes.io/pre-shared-cert
. - Menyimpan snapshot Ingress, lalu menghapus dan memulihkan Ingress tersebut dari
snapshot. Sementara itu, resource
SslCertificate
yang tercantum dalam anotasiingress.gcp.kubernetes.io/pre-shared-cert
mungkin telah dihapus. Ingress tidak akan berfungsi jika sertifikat yang dipasang ke Ingress tidak ada.
Jika komunikasi antara sertifikat yang dikelola Google dan Ingress terganggu,
hapus konten anotasi ingress.gcp.kubernetes.io/pre-shared-cert
dan tunggu
hingga sistem direkonsiliasi. Untuk mencegah pengulangan, pastikan anotasi
tidak diubah atau dihapus secara tidak sengaja.
Error validasi saat membuat sertifikat yang dikelola Google
Definisi ManagedCertificate
divalidasi sebelum objek ManagedCertificate
dibuat. Jika validasi gagal, objek ManagedCertificate
tidak akan dibuat dan pesan error akan dicetak. Berbagai pesan dan alasan error dijelaskan sebagai berikut:
spec.domains in body should have at most 100 items
Manifes ManagedCertificate
Anda mencantumkan lebih dari 100 domain di
kolom spec.domains
. Sertifikat yang dikelola Google hanya mendukung maksimal 100 domain.
spec.domains in body should match '^(([a-zA-Z0-9]+|[a-zA-Z0-9][-a-zA-Z0-9]*[a-zA-Z0-9])\.)+[a-zA-Z][-a-zA-Z0-9]*[a-zA-Z0-9]\.?$'
Anda menentukan nama domain yang tidak valid atau nama domain dengan karakter pengganti di kolom spec.domains
. Objek ManagedCertificate
tidak mendukung domain dengan karakter pengganti (misalnya, *.example.com
).
spec.domains in body should be at most 63 chars long
Nama domain yang Anda tentukan terlalu panjang. Sertifikat yang dikelola Google mendukung nama domain yang memiliki maksimal 63 karakter.
Memperbarui sertifikat yang dikelola Google secara manual
Untuk memperbarui sertifikat secara manual agar sertifikat untuk domain lama terus berfungsi hingga sertifikat untuk domain baru disediakan, ikuti langkah-langkah berikut:
- Buat
ManagedCertificate
untuk domain baru. - Tambahkan nama
ManagedCertificate
ke anotasinetworking.gke.io/managed-certificates
di Ingress menggunakan daftar yang dipisahkan koma. Jangan hapus nama sertifikat yang lama. - Tunggu hingga
ManagedCertificate
menjadi Aktif. - Lepaskan sertifikat lama dari Ingress dan hapus sertifikat tersebut.
Saat Anda membuat ManagedCertificate
, Google Cloud akan membuat sertifikat SSL yang dikelola Google. Anda tidak dapat memperbarui sertifikat ini. Jika Anda memperbarui ManagedCertificate
, Google Cloud akan menghapus dan membuat ulang sertifikat SSL yang dikelola Google.
Guna menyediakan Ingress terenkripsi HTTPS yang aman untuk cluster GKE, silakan melihat contoh Ingress yang Aman.
Langkah selanjutnya
- Pelajari lebih lanjut sertifikat yang dikelola Google.
- Pelajari cara menyiapkan Load Balancer Aplikasi eksternal dengan Ingress.
- Pelajari cara Menggunakan beberapa sertifikat SSL dengan Load Balancer Aplikasi eksternal dengan Ingress.
- Menerapkan Ingress yang aman.