您可以使用簡易的 TLS 來保護入口網關,並啟用與特定網頁的 HTTPS 連線。此外,您也可以將 HTTP 連線重新導向至 HTTPS。
HTTPS 會在不安全的網路上建立安全管道,防止中間人攻擊,並加密用戶端和伺服器之間的流量。如要讓網路伺服器接受 HTTPS 連線,管理員必須為伺服器建立公開金鑰憑證。這個憑證必須由信任的憑證授權單位簽署,才能讓網路瀏覽器在沒有警告的情況下接受。
使用內建的 Kubernetes 編輯器,編輯 kf
命名空間中名為 external-gateway 的閘道:
kubectl edit gateway -n kf external-gateway
- 假設您有服務的憑證和金鑰,請為輸入閘道建立 Kubernetes 密鑰。請確認密鑰名稱開頭不是
istio
或prometheus
。在本例中,密鑰名稱為myapp-https-credential
。 - 在
servers:
下方- 新增通訊埠 443 的區段。
- 在
tls:
下,將credentialName
設為您剛建立的密鑰名稱。 - 在
hosts:
下方,新增要透過 HTTPS 保護的服務主機名稱。您可以使用萬用字元 (例如*.example.com
) 將此設定套用至整個網域,也可以將範圍限定為單一主機名稱 (例如myapp.example.com
)。
servers:
下方應該已經有通訊埠 80 HTTP 的部分。如果希望所有流量都以 HTTP 形式傳入,請保留這個部分。- 如要將 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