All Products
Search
Document Center

Alibaba Cloud Service Mesh:Menerbitkan sertifikat untuk gerbang masuk ASM

Last Updated:Jun 22, 2026

Protokol Automatic Certificate Management Environment (ACME) mengotomatiskan proses memperoleh dan memperbarui sertifikat X.509. Protokol ini memungkinkan certificate authority (CA) secara otomatis memverifikasi kepemilikan domain dan menerbitkan sertifikat yang sesuai. Let's Encrypt adalah CA publik nirlaba yang menggunakan protokol ACME untuk menerbitkan sertifikat yang dipercaya oleh sebagian besar browser web. Topik ini menjelaskan cara menggunakan cert-manager dengan Let's Encrypt guna menerbitkan sertifikat HTTPS yang dipercaya browser untuk gerbang masuk ASM.

Prasyarat

ACME di cert-manager

Saat menggunakan cert-manager, komponen ACME Issuer mendaftarkan akun pengguna ke server CA yang mendukung protokol ACME. Saat membuat ACME Issuer, cert-manager menghasilkan kunci privat untuk berkomunikasi secara aman dengan server ACME. Sertifikat dari CA publik seperti Let's Encrypt dipercaya secara default oleh sebagian besar browser web. Artinya, ketika pengguna mengunjungi situs web Anda, browser mereka secara otomatis mempercayai sertifikat SSL/TLS tersebut. Tujuan utama CA publik adalah membuktikan kepada browser bahwa server merupakan pemilik sah domain tersebut. Untuk itu, CA harus memverifikasi bahwa pemohon benar-benar mengontrol domain sebelum menerbitkan sertifikat. Untuk informasi selengkapnya tentang protokol ACME, lihat Automatic Certificate Management Environment.

Menyelesaikan tantangan

Tantangan (challenge) adalah mekanisme protokol ACME untuk memverifikasi kepemilikan domain Anda. Selama proses penerbitan sertifikat, server ACME mengharuskan klien menyelesaikan tantangan tertentu. Hal ini memastikan hanya pemilik sah domain yang dapat memperoleh sertifikat untuk domain tersebut, sehingga mencegah spoofing domain dan meningkatkan keamanan. cert-manager mendukung dua jenis tantangan utama: HTTP-01 dan DNS-01.

  • Tantangan HTTP-01 mengharuskan Anda membuktikan kepemilikan dengan menempatkan file berisi kunci validasi di URL tertentu pada server Anda. URL tersebut harus dapat diakses publik dan mencakup domain yang diminta sertifikatnya. Ketika server ACME berhasil mengambil kunci dari path tersebut, domain dianggap tervalidasi. Untuk menyederhanakan proses ini, cert-manager mengotomatiskannya. Saat Anda mengonfigurasi tantangan HTTP-01, cert-manager secara sementara menyesuaikan resource Ingress kluster Anda untuk mengarahkan permintaan validasi ke layanan web kecil yang menampilkan kunci validasi yang diperlukan ke server ACME.

  • Tantangan DNS-01 mengharuskan Anda membuktikan kepemilikan dengan membuat Rekaman TXT DNS tertentu yang berisi kunci validasi. Setelah rekaman tersebut tersebar melalui sistem DNS, server ACME dapat memverifikasi kepemilikan domain Anda melalui pencarian DNS. Jika diberikan izin yang diperlukan, cert-manager dapat secara otomatis membuat dan mengirimkan Rekaman TXT yang diperlukan ke penyedia DNS Anda untuk menyelesaikan tantangan DNS-01.

Catatan

Di lingkungan produksi, pastikan certificate authority Anda mendukung protokol ACME. Jika ya, gerbang masuk ASM dapat secara otomatis memperoleh sertifikat dari CA melalui cert-manager. Sebagai contoh, Sectigo mendukung protokol ACME dan bekerja dengan prinsip serupa.

Langkah 1: Menyiapkan domain publik

Untuk menggunakan Let's Encrypt dalam menerbitkan sertifikat, Anda memerlukan domain publik yang mengarah ke gerbang masuk ASM. Ikuti instruksi dari penyedia DNS Anda. Jika Anda menggunakan Alibaba Cloud DNS, lihat Menambahkan Rekaman DNS. Untuk informasi selengkapnya tentang Let's Encrypt, lihat Getting Started.

Langkah 2: Membuat resource Let's Encrypt Issuer

  1. Gunakan KubeConfig kluster bidang data Anda untuk membuat resource berikut.

    apiVersion: cert-manager.io/v1
    kind: Issuer
    metadata:
      name: letsencrypt-prod-issuer
      namespace: istio-system
    spec:
      acme:
        email: 'te**@mail.com'    # Bidang ini opsional tetapi disarankan. Server ACME dapat menggunakan email ini untuk mengirimkan pemberitahuan penting tentang sertifikat Anda.
        privateKeySecretRef:
          name: letsencrypt-prod
        server: https://acme-v02.api.letsencrypt.org/directory
        solvers:
        - http01:
            ingress:
              ingressClassName: istio

    Resource Issuer di atas menentukan solver http01 yang menggunakan API Ingress dengan ingressClassName bernilai istio. Langkah-langkah berikut menjelaskan cara kerja solver ini.

    Catatan

    cert-manager mendukung solver berbasis API Ingress maupun Gateway API. ASM juga mendukung kedua API tersebut. Contoh ini menggunakan API Ingress.

  2. Tunggu hingga Issuer siap digunakan. Jalankan perintah berikut untuk memeriksa statusnya.

    kubectl -n istio-system get issuer letsencrypt-prod-issuer

    Output yang diharapkan:

    NAME                      READY   AGE
    letsencrypt-prod-issuer   True    8m3s

Langkah 3: Menerbitkan sertifikat

  1. Gunakan KubeConfig kluster bidang data Anda untuk membuat resource berikut.

    apiVersion: cert-manager.io/v1
    kind: Certificate
    metadata:
      name: istio-ingressgateway-certs
      namespace: istio-system
    spec:
      dnsNames:
      - ${YOUR_DOMAIN}    # Contohnya, test.com
      issuerRef:
        group: cert-manager.io
        kind: Issuer
        name: letsencrypt-prod-issuer
      secretName: istio-ingressgateway-certs
  2. Tunggu hingga Certificate siap digunakan. Jalankan perintah berikut untuk memeriksa statusnya.

    kubectl -n istio-system get certificate istio-ingressgateway-certs

    Output yang diharapkan:

    NAME                         READY   SECRET                       AGE
    istio-ingressgateway-certs   True    istio-ingressgateway-certs   59m

Proses penerbitan sertifikat

Setelah membuat resource Certificate, cert-manager menggunakan Issuer yang ditentukan untuk menerbitkan sertifikat bagi domain tersebut. Selama proses ini, solver yang dikonfigurasi diaktifkan.

Let's Encrypt menggunakan tantangan HTTP-01 untuk memastikan bahwa server yang meminta sertifikat benar-benar memiliki domain tersebut. Untuk itu, Let's Encrypt mengirim permintaan HTTP ke domain tersebut dan mengharapkan respons valid guna menyelesaikan verifikasi. Dalam contoh ini, gerbang masuk hanya memiliki aturan routing untuk aplikasi httpbin, tanpa konfigurasi khusus untuk tantangan tersebut. Apakah Let's Encrypt benar-benar mengirim permintaan tantangan? Dan bagaimana permintaan tersebut dijawab?

Anda dapat menjalankan perintah berikut untuk memeriksa log gerbang dan menentukan apakah Let's Encrypt mengirim permintaan tantangan.

kubectl -n istio-system logs ${GATEWAY_POD_NAME} | grep letsencrypt | tail -1

Tampilkan output yang diharapkan

{
    "authority_for": "xxxxxxx",
    "bytes_received": "0",
    "bytes_sent": "87",
    "downstream_local_address": "xx.xx.xx.xx:80",
    "downstream_remote_address": "xx.xx.xx.xx:57101",
    "duration": "0",
    "istio_policy_status": "-",
    "method": "GET",
    "path": "/.well-known/acme-challenge/JfKvfdSNmkR7UqmCQU0OSkJC3EsnP4ZUiCc28OLLLxA",
    "protocol": "HTTP/1.1",
    "request_id": "e6806d08-0469-4383-be8e-4d7506b39ec5",
    "requested_server_name": "-",
    "response_code": "200",
    "response_flags": "-",
    "route_name": "-",
    "start_time": "2024-04-08T12:04:06.153Z",
    "trace_id": "-",
    "upstream_cluster": "outbound|8089||cm-acme-http-solver-c4ch9.istio-system.svc.cluster.local",
    "upstream_host": "xx.xx.xx.xx:8089",
    "upstream_local_address": "xx.xx.xx.xx:55886",
    "upstream_response_time": "0",
    "upstream_service_time": "0",
    "upstream_transport_failure_reason": "-",
    "user_agent": "Mozilla/5.0 (compatible; Let's Encrypt validation server; +https://www.letsencrypt.org)",
    "x_forwarded_for": "xx.xx.xx.xx"
}

Log tersebut menunjukkan bahwa gerbang menerima dan berhasil menangani permintaan dari Let's Encrypt. Karena Issuer dikonfigurasi dengan ingressClassName bernilai istio, cert-manager secara otomatis membuat resource Ingress sementara dengan ingressClassName yang sama, yaitu istio. Resource Ingress ini meneruskan permintaan tantangan ke solver cert-manager, yang menyelesaikan verifikasi.

Setelah resource Certificate siap, Anda tidak dapat melihat resource Ingress sementara tersebut dengan menjalankan kubectl -n istio-system get ingress. Hal ini karena cert-manager secara otomatis menghapus resource terkait solver, seperti Ingress, Service, dan Deployment, setelah sertifikat berhasil diterbitkan.

Langkah 4: Memverifikasi sertifikat

  1. Buat resource Gateway berikut untuk mengonfigurasi sertifikat yang dihasilkan di Langkah 3 pada Port 443 gerbang. Untuk informasi selengkapnya, lihat Mengelola gateway Istio.

    apiVersion: networking.istio.io/v1beta1
    kind: Gateway
    metadata:
      name: httpbin-https
      namespace: default
    spec:
      selector:
        istio: ingressgateway
      servers:
      - hosts:
        - ${YOUR_DOMAIN}
        port:
          name: https
          number: 443
          protocol: HTTPS
        tls:
          credentialName: istio-ingressgateway-certs
          mode: SIMPLE
  2. Ubah layanan virtual httpbin-vs yang sudah ada sebagai berikut. Untuk informasi selengkapnya, lihat Mengelola layanan virtual.

    apiVersion: networking.istio.io/v1beta1
    kind: VirtualService
    metadata:
      name: httpbin-vs
      namespace: default
    spec:
      gateways:
        - httpbin
        - httpbin-https  # Tambahkan baris ini.
      hosts:
        - '*'
      http:
        - name: test
          route:
            - destination:
                host: httpbin.default.svc.cluster.local
                port:
                  number: 8000
  3. Buka browser Anda dan navigasikan ke https://${YOUR_DOMAIN}.

    Pada bilah alamat browser, klik ikon gembok image. Pesan Connection is secure muncul, yang menunjukkan bahwa browser Anda mempercayai sertifikat tersebut.