瞭解如何設定 Knative Serving,以使用您自己的 SSL/TLS 憑證。
或者,您也可以使用受管理 TLS 憑證功能,透過 Let's Encrypt 自動建立及續訂 TLS 憑證。
如要使用自己的憑證,請將 TLS 憑證儲存在 Kubernetes Secret 中,然後設定 Cloud Service Mesh 的 Ingress 閘道,使用該 Secret。
事前準備
- 這些操作說明假設您已取得 TLS 憑證。
- 您必須設定自訂網域。詳情請參閱「對應自訂網域」。
- 您必須設定每個使用Ingress 閘道提供外部流量的 Knative 服務。如果這些面向外部的服務未設定為使用 TLS 憑證,服務就無法驗證 HTTPS 連線,因此永遠無法達到 ready狀態。
將 TLS 憑證儲存在 Kubernetes Secret 中
如要將憑證儲存到密鑰:
- 開啟終端機,然後前往 TLS 憑證所在的目錄。 
- 使用下列指令建立儲存憑證的密鑰: - kubectl create --namespace INGRESS_NAMESPACE secret tls SECRET_NAME \ --key PRIVATE_KEY.pem \ --cert FULL_CHAIN.pem - 取代: - INGRESS_NAMESPACE,並將 istio-ingressgateway換成 Ingress 服務的命名空間。如果您使用預設設定安裝 Cloud Service Mesh,請指定istio-system命名空間。
- SECRET_NAME 替換為您要使用的 Kubernetes Secret 名稱。
- PRIVATE_KEY.pem,並將其替換為儲存憑證私密金鑰的檔案名稱。
- FULL_CHAIN.pem,並將其替換為公開憑證的檔案名稱。
 
- INGRESS_NAMESPACE,並將 
現在您可以設定 Ingress 閘道,使用您剛為 TLS 憑證建立的密鑰。
設定 Ingress 閘道以使用憑證
修改 Cloud Service Mesh 的 Ingress 閘道,使用您為 TLS 憑證建立的密鑰:
- 執行下列指令,以編輯模式開啟 Ingress 閘道 YAML: - kubectl edit gateway knative-ingress-gateway --namespace knative-serving - 預設 Ingress 閘道設定範例: - apiVersion: networking.istio.io/v1beta1 kind: Gateway metadata: ... # other skipped configuration ... spec: selector: istio: ingressgateway servers: - hosts: - '*' port: name: http number: 80 protocol: HTTP
- 在現有 YAML 中附加 - hosts、- port和- tls屬性,設定 Ingress 閘道使用您的密鑰。- 如要設定所有服務使用相同密鑰:在 YAML 設定中附加下列內容,並將 - "*"指定為- hosts屬性值:- ... # other skipped configuration ... - hosts: - "*" port: name: https number: 443 protocol: HTTPS tls: mode: SIMPLE credentialName: SECRET_NAME- 將 SECRET_NAME 替換為您建立的密鑰名稱。 - 查看範例。 
- 個別設定每項服務:在 YAML 設定中附加下列內容,並使用服務的名稱和命名空間,為 - hosts屬性指定值:- 針對每項服務,指定 - hosts、- port和- 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- 取代: - SERVICE_NAME 改為 Knative serving 服務的名稱。凡是使用 Ingress 閘道提供外部流量的服務,都必須個別設定。
- SERVICE_NAMESPACE 改為服務執行的命名空間名稱。
- CUSTOM_DOMAIN,並將服務設定為使用該自訂網域。
- SECRET_NAME 替換為您要服務使用的密鑰名稱。如果您為不同的 TLS 憑證集建立多個密鑰,可以指定每個服務使用的密鑰。
 - 查看範例。 
 
- 儲存變更。 
您現在可以使用 HTTPS 通訊協定,存取已部署的 Knative 服務服務。
範例
- 設定所有服務:
- 以下範例說明如何設定所有服務,以使用 - 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
- 設定個別服務:
- 這個範例示範如何個別設定所有三項提供網際網路流量的服務: - 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