了解如何配置 Knative 服务以使用您自己的 SSL/TLS 证书。
或者,您也可以使用代管式 TLS 证书功能,该功能通过 Let's Encrypt 自动创建和续订 TLS 证书。
如需使用您自己的证书,请将您的 TLS 证书存储在 Kubernetes Secret 中,然后将 Anthos Service Mesh 的入站网关配置为使用该 Secret。
准备工作
- 以下说明假定您已获取 TLS 证书。
- 您必须配置自定义网域。如需了解详情,请参阅映射自定义网域。
- 您需要配置每项使用入站流量网关来处理外部流量的 Knative 服务服务。如果这些面向外部的服务未配置为使用 TLS 证书,则这些服务将无法验证 HTTPS 连接,从而永远不会到达
ready
状态。
在 Kubernetes Secret 中存储 TLS 证书
如需将证书存储到 Secret 中,请执行以下操作:
打开终端并导航到 TLS 证书所在的目录。
使用以下命令创建用于存储证书的 Secret:
kubectl create --namespace INGRESS_NAMESPACE secret tls SECRET_NAME \ --key PRIVATE_KEY.pem \ --cert FULL_CHAIN.pem
您需要在其中:
- 将 INGRESS_NAMESPACE 替换为您的入站服务(即
istio-ingressgateway
)的命名空间。如果您使用默认配置安装了 Anthos Service Mesh,请指定istio-system
命名空间。 - 将 SECRET_NAME 替换为您要用于 Kubernetes Secret 的名称。
- 将 PRIVATE_KEY.pem 替换为包含证书私钥的文件的名称。
- 将 FULL_CHAIN.pem 替换为包含公共证书的文件的名称。
- 将 INGRESS_NAMESPACE 替换为您的入站服务(即
您现在可以将入站网关配置为使用您刚为 TLS 证书创建的 Secret。
配置入站网关以使用证书
修改 Anthos Service Mesh 的入站网关,以使用您为 TLS 证书创建的 Secret:
运行以下命令,以在修改模式下打开入站网关 YAML:
kubectl edit gateway knative-ingress-gateway --namespace knative-serving
默认入站网关配置示例:
apiVersion: networking.istio.io/v1beta1 kind: Gateway metadata: ... # other skipped configuration ... spec: selector: istio: ingressgateway servers: - hosts: - '*' port: name: http number: 80 protocol: HTTP
通过将
hosts
、port
和tls
特性附加到现有 YAML,将入站网关配置为使用您的 Secret。将所有服务都配置为使用同一 Secret:将以下项附加到 YAML 配置,然后将
"*"
指定为hosts
特性值:... # other skipped configuration ... - hosts: - "*" port: name: https number: 443 protocol: HTTPS tls: mode: SIMPLE credentialName: SECRET_NAME
将 SECRET_NAME 替换为您创建的 Secret 的名称。
单独配置每项服务:将以下项附加到 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 服务服务的名称。每个使用入站网关来处理外部流量的服务都必须单独配置。
- 将 SERVICE_NAMESPACE 替换为在其中运行服务的命名空间的名称。
- 将 CUSTOM_DOMAIN 替换为服务要使用的自定义网域。
- 将 SECRET_NAME 替换为服务要使用的 Secret 的名称。如果您为不同的 TLS 证书集创建了多个 Secret,则可以指定每个服务要使用哪个 Secret。
保存更改。
您现在可以使用 HTTPS 协议访问已部署的 Knative 服务服务。
示例
- 配置所有服务:
以下示例演示了如何将所有服务都配置为使用
TLSsecret
Secret: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