Menggunakan sertifikat SSL yang dikelola Google


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 anotasi networking.gke.io/managed-certificates ke Ingress. Anotasi ini adalah daftar objek ManagedCertificate 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 dan ManagedCertificate 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:

    1. Buka halaman Alamat IP eksternal di Konsol Google Cloud.

      Buka Alamat IP Eksternal

    2. Tentukan nama untuk alamat IP (misalnya, example-ip-address).

    3. Tentukan apakah Anda menginginkan alamat IPv4 atau IPv6.

    4. Pilih opsi Global untuk Jenis.

    5. 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.

    apiVersion: compute.cnrm.cloud.google.com/v1beta1
    kind: ComputeAddress
    metadata:
      name: example-ip-address
    spec:
      location: global
    Untuk men-deploy manifes ini, download ke komputer Anda sebagai compute-address.yaml, lalu jalankan:

    kubectl apply -f compute-address.yaml
    

Menyiapkan sertifikat yang dikelola Google

  1. Membuat objek ManagedCertificate. Resource ini menentukan domain untuk sertifikat SSL. Domain karakter pengganti tidak didukung.

    Manifes berikut menjelaskan objek ManagedCertificate. Simpan manifes sebagai managed-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 dan www.example.com.
  2. Terapkan manifes ke cluster Anda:

    kubectl apply -f managed-cert.yaml
    
  3. Buat Layanan jenis NodePort untuk mengekspos aplikasi Anda ke internet.

    Manifes berikut menjelaskan Layanan jenis NodePort. Simpan manifes sebagai mc-service.yaml.

    apiVersion: v1
    kind: Service
    metadata:
      name: mc-service
    spec:
      selector:
        app: mc-service
      type: NodePort
      ports:
        - protocol: TCP
          port: 80
          targetPort: 8080
    
  4. Terapkan manifes ke cluster Anda:

    kubectl apply -f mc-service.yaml
    
  5. Membuat Ingress.

    Manifes berikut menjelaskan Ingress yang menggunakan ManagedCertificate yang Anda buat. Simpan manifes sebagai managed-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: nilai ports.port dalam Manifes layanan Anda.
  6. Terapkan manifes ke cluster Anda:

    kubectl apply -f managed-cert-ingress.yaml
    
  7. 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.

  8. 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.

  9. 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. Jika Status.CertificateStatus bukan Active, sertifikat belum disediakan.

  10. Anda dapat memeriksa peristiwa di Ingress menggunakan perintah berikut:

    kubectl describe ingress INGRESS_NAME
    

    Ganti INGRESS_NAME dengan nama Ingress Anda.

  11. 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.

  1. Tambahkan sertifikat baru yang dikelola Google ke Ingress, seperti yang dijelaskan di bagian Menyiapkan sertifikat yang dikelola Google.
  2. Tunggu hingga status resource sertifikat yang dikelola Google menjadi Aktif. Periksa status sertifikat dengan perintah berikut:

    kubectl describe managedcertificate managed-cert
    
  3. 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.

  1. Hapus objek ManagedCertificate:

    kubectl delete -f managed-cert.yaml
    

    Outputnya mirip dengan hal berikut ini:

    managedcertificate.networking.gke.io "managed-cert" deleted
    
  2. Hapus anotasi dari Ingress:

    kubectl annotate ingress managed-cert-ingress networking.gke.io/managed-certificates-
    

    Perhatikan tanda minus, -, di akhir perintah.

  3. 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:

    1. Buka halaman Alamat IP eksternal di Konsol Google Cloud.

      Buka External IP addresses

    2. Pilih kotak centang di samping alamat IP yang ingin Anda rilis.

    3. Klik Rilis alamat IP.

    Config Connector

    Catatan: Langkah ini memerlukan Config Connector. Ikuti petunjuk penginstalan untuk menginstal Config Connector di cluster Anda.

    apiVersion: compute.cnrm.cloud.google.com/v1beta1
    kind: ComputeAddress
    metadata:
      name: example-ip-address
    spec:
      location: global

    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 anotasi ingress.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:

  1. Buat ManagedCertificate untuk domain baru.
  2. Tambahkan nama ManagedCertificate ke anotasi networking.gke.io/managed-certificates di Ingress menggunakan daftar yang dipisahkan koma. Jangan hapus nama sertifikat yang lama.
  3. Tunggu hingga ManagedCertificate menjadi Aktif.
  4. 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