設定 HTTPS Ingress

您可以使用簡易的 TLS 來保護入口網關,並啟用與特定網頁的 HTTPS 連線。此外,您也可以將 HTTP 連線重新導向至 HTTPS。

HTTPS 會在不安全的網路上建立安全管道,防止中間人攻擊,並加密用戶端和伺服器之間的流量。如要讓網路伺服器接受 HTTPS 連線,管理員必須為伺服器建立公開金鑰憑證。這個憑證必須由信任的憑證授權單位簽署,才能讓網路瀏覽器在沒有警告的情況下接受。

使用內建的 Kubernetes 編輯器,編輯 kf 命名空間中名為 external-gateway 的閘道:

kubectl edit gateway -n kf external-gateway
  1. 假設您有服務的憑證和金鑰,請為輸入閘道建立 Kubernetes 密鑰。請確認密鑰名稱開頭不是 istioprometheus。在本例中,密鑰名稱為 myapp-https-credential
  2. servers: 下方
    1. 新增通訊埠 443 的區段。
    2. tls: 下,將 credentialName 設為您剛建立的密鑰名稱。
    3. hosts: 下方,新增要透過 HTTPS 保護的服務主機名稱。您可以使用萬用字元 (例如 *.example.com) 將此設定套用至整個網域,也可以將範圍限定為單一主機名稱 (例如 myapp.example.com)。
  3. servers: 下方應該已經有通訊埠 80 HTTP 的部分。如果希望所有流量都以 HTTP 形式傳入,請保留這個部分。
  4. 如要將 HTTP 重新導向至 HTTPS,請在 HTTP 伺服器區段的 tls 下方新增 httpsRedirect: true 值。請參閱 Istio Gateway 說明文件。請注意,如果在 hosts 設為 * 的部分新增這項設定,代表所有流量都會重新導向至 HTTPS。如果您只想將 HTTP 重新導向至單一應用程式/網域的 HTTPS,請新增個別的 HTTP 區段,指定重新導向。

以下是閘道 spec 的範例,該閘道會為 myapp.example.com 設定 HTTPS,並將 HTTP 重新導向至該主機的 HTTPS:

spec:
  selector:
    istio: ingressgateway
  servers:
  - hosts:
    - myapp.example.com
    port:
      name: https
      number: 443
      protocol: HTTPS
    tls:
      credentialName: myapp-https-credential
      mode: SIMPLE
  - hosts:
    - myapp.example.com
    port:
      name: http-my-app
      number: 80
      protocol: HTTP
    tls:
      httpsRedirect: true
  - hosts:
    - '*'
    port:
      name: http
      number: 80
      protocol: HTTP