Menggunakan sertifikat TLS Anda sendiri

Pelajari cara mengonfigurasi layanan Knative untuk menggunakan sertifikat SSL/TLS Anda sendiri.

Atau, Anda dapat menggunakan fitur sertifikat TLS terkelola, yang secara otomatis membuat dan memperpanjang sertifikat TLS melalui Let's Encrypt

Untuk menggunakan sertifikat Anda sendiri, Anda menyimpan sertifikat TLS di Secret Kubernetes, lalu mengonfigurasi gateway ingress Cloud Service Mesh untuk menggunakan secret tersebut.

Sebelum memulai

  • Petunjuk ini mengasumsikan bahwa Anda telah mendapatkan sertifikat TLS.
  • Anda harus mengonfigurasi domain kustom. Untuk mengetahui detailnya, lihat bagian Memetakan domain kustom.
  • Anda diwajibkan untuk mengonfigurasi setiap layanan Knative yang menggunakan gateway ingress untuk melayani traffic eksternal. Jika layanan yang menghadap eksternal ini tidak dikonfigurasi untuk menggunakan sertifikat TLS Anda, layanan tidak akan dapat memverifikasi koneksi HTTPS dan oleh karena itu, tidak akan pernah mencapai status ready.

Menyimpan sertifikat TLS di Secret Kubernetes

Untuk menyimpan sertifikat ke dalam Secret:

  1. Buka terminal dan buka direktori tempat sertifikat TLS Anda berada.

  2. Gunakan perintah berikut untuk membuat secret yang menyimpan sertifikat Anda:

    kubectl create --namespace INGRESS_NAMESPACE secret tls SECRET_NAME \
      --key PRIVATE_KEY.pem \
      --cert FULL_CHAIN.pem

    Ganti:

    • INGRESS_NAMESPACE dengan namespace layanan ingress Anda, istio-ingressgateway. Tentukan namespace istio-system jika Anda menginstal Cloud Service Mesh menggunakan konfigurasi default.
    • SECRET_NAME dengan nama yang ingin Anda gunakan untuk Secret Kubernetes.
    • PRIVATE_KEY.pem dengan nama file yang menyimpan kunci pribadi sertifikat Anda.
    • FULL_CHAIN.pem dengan nama file yang menyimpan sertifikat publik Anda.

Sekarang Anda dapat mengonfigurasi gateway ingress untuk menggunakan secret yang baru saja Anda buat untuk sertifikat TLS Anda.

Mengonfigurasi gateway traffic masuk untuk menggunakan sertifikat Anda

Ubah gateway masuk Cloud Service Mesh untuk menggunakan secret yang Anda buat untuk sertifikat TLS Anda:

  1. Buka YAML gateway ingress dalam mode edit dengan menjalankan perintah berikut:

    kubectl edit gateway knative-ingress-gateway --namespace knative-serving

    Contoh konfigurasi gateway ingress default:

    apiVersion: networking.istio.io/v1beta1
    kind: Gateway
    metadata:
      ...
      # other skipped configuration
      ...
    spec:
      selector:
        istio: ingressgateway
      servers:
      - hosts:
        - '*'
        port:
          name: http
          number: 80
          protocol: HTTP
    
  2. Konfigurasi gateway ingress untuk menggunakan secret Anda dengan menambahkan atribut hosts, port, dan tls ke YAML yang ada.

    • Untuk mengonfigurasi semua layanan agar menggunakan secret yang sama: Tambahkan kode berikut ke konfigurasi YAML Anda dan tentukan "*" sebagai nilai atribut hosts:

      ...
      # other skipped configuration
      ...
      - hosts:
        - "*"
        port:
          name: https
          number: 443
          protocol: HTTPS
        tls:
          mode: SIMPLE
          credentialName: SECRET_NAME
      

      Ganti SECRET_NAME dengan nama secret yang Anda buat.

      Lihat contoh.

    • Untuk mengonfigurasi setiap layanan secara terpisah: Tambahkan kode berikut ke konfigurasi YAML Anda dan tentukan nilai untuk atribut hosts menggunakan nama dan namespace layanan:

      Untuk setiap layanan, Anda menentukan nilai untuk atribut hosts, port, dan tls:

      ...
      # other skipped configuration
      ...
      - hosts:
        - SERVICE_NAME.SERVICE_NAMESPACE.CUSTOM_DOMAIN
        port:
          number: 443
          name: https-SERVICE_NAME
          protocol: HTTPS
        tls:
          mode: SIMPLE
          credentialName: SECRET_NAME
      

      Ganti:

      • SERVICE_NAME dengan nama layanan Knative serving. Setiap layanan yang menggunakan gateway ingress untuk melayani traffic eksternal harus dikonfigurasi satu per satu.
      • SERVICE_NAMESPACE dengan nama namespace tempat layanan berjalan.
      • CUSTOM_DOMAIN dengan domain kustom yang Anda konfigurasi untuk digunakan oleh layanan.
      • SECRET_NAME dengan nama secret yang Anda inginkan agar digunakan oleh layanan. Jika Anda membuat beberapa secret untuk berbagai kumpulan sertifikat TLS, Anda dapat menentukan secret mana yang digunakan setiap layanan.

      Lihat contoh.

  3. Simpan perubahan.

Sekarang Anda dapat menggunakan protokol HTTPS untuk mengakses layanan Knative yang di-deploy.

Contoh

Mengonfigurasi semua layanan:

Contoh ini menunjukkan cara mengonfigurasi semua layanan untuk menggunakan secret TLSsecret:

apiVersion: networking.istio.io/v1alpha3
kind: Gateway
metadata:
  ...
  # other skipped configuration
  ...
spec:
  selector:
    istio: ingressgateway
  servers:
    - hosts:
      - "*"
      port:
        name: http
        number: 80
        protocol: HTTP
    - hosts:
      - "*"
      port:
        name: https
        number: 443
        protocol: HTTPS
      tls:
        mode: SIMPLE
        credentialName: TLSsecret
Mengonfigurasi setiap layanan:

Contoh ini menunjukkan cara mengonfigurasi ketiga layanan yang melayani traffic internet secara terpisah:

apiVersion: networking.istio.io/v1alpha3
kind: Gateway
metadata:
  ...
  # other skipped configuration
  ...
spec:
  selector:
    istio: ingressgateway
  servers:
  - hosts:
    - "*"
    port:
      name: http
      number: 80
      protocol: HTTP
  - hosts:
    - prodservice.prodnamespace.my-custom-domain.com
    port:
      number: 443
      name: https-prodservice
      protocol: HTTPS
    tls:
      mode: SIMPLE
      credentialName: TLSsecret
  - hosts:
    - experiment.namespace.my-custom-domain.com
    port:
      number: 443
      name: https-experiment
      protocol: HTTPS
    tls:
      mode: SIMPLE
      credentialName: TLSsecret
  - hosts:
    - fallbackservice.anothernamespace.my-custom-domain.com
    port:
      number: 443
      name: https-fallbackservice
      protocol: HTTPS
    tls:
      mode: SIMPLE
      credentialName: anotherTLSsecret