本页面介绍如何设置 Cloud Run for Anthos,以使用您自己的 SSL/TLS 证书(适用于您不想使用代管式 TLS 证书功能的场合)。
将证书存储到 Kubernetes Secret 并在 Istio Ingress Gateway 规范中指定证书后,Istio Ingress Gateway 可以支持从您的证书提供的 TLS 协议。
准备工作
这些说明假定您已拥有自己的 TLS 证书。
将 TLS 证书/私钥存储到 Kubernetes Secret 中
如需将证书存储到 Secret 中,请执行以下操作:
将证书复制到当前目录中。
使用以下命令创建用于存储证书的 Secret,其中
privkey.pem
包含您的证书私钥,而fullchain.pem
包含公共证书:kubectl create --namespace gke-system secret tls SECRET_NAME \ --key privkey.pem \ --cert fullchain.pem
为 Istio Ingress Gateway 指定 TLS 证书
修改 Istio Ingress Gateway 规范以使用包含 TLS 证书的 Kubernetes Secret:
打开共享网关规范以进行修改:
kubectl edit gateway gke-system-gateway --namespace knative-serving
将以下部分添加到您的网关规范,使用您先前创建的 Secret 指定 TLS 证书:
- hosts: - "*" port: name: https number: 443 protocol: HTTPS tls: mode: SIMPLE credentialName: SECRET_NAME
您的网关规范应如下所示:
apiVersion: networking.istio.io/v1alpha3 kind: Gateway metadata: # ... skipped ... 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: SECRET_NAME
如果您要为不同命名空间中的两种不同服务添加多个 TLS 证书,则您的网关规范可能如下所示:
apiVersion: networking.istio.io/v1alpha3 kind: Gateway metadata: # ... skipped ... spec: selector: istio: ingressgateway servers: - hosts: - "*" port: name: http number: 80 protocol: HTTP - port: number: 443 name: https-SERVICE1_NAME protocol: HTTPS tls: mode: SIMPLE credentialName: SECRET1_NAME hosts: - SERVICE1_NAME.NAMESPACE1.example.com - port: number: 443 name: https-SERVICE2_NAME protocol: HTTPS tls: mode: SIMPLE credentialName: SECRET2_NAME hosts: - SERVICE2_NAME.NAMESPACE2.example.com
保存更改。
完成此更改后,您就可以使用 HTTPS 协议访问已部署的服务。