瞭解如何設定 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