$ oc create secret tls <tls_secret_name> --cert=<path_to_certificate_file> --key=<path_to_key_file>
配置 Knative 服务的自定义域后,您可以使用 TLS 证书来保护已映射的服务。为此,您必须创建一个 Kubernetes TLS 密钥,然后更新DomainMapping
CR 以使用您创建的 TLS 密钥。
您已为 Knative 服务配置了自定义域,并且拥有一个可运行的DomainMapping
CR。
您拥有来自证书颁发机构提供商的 TLS 证书或自签名证书。
您已从证书颁发机构提供商或自签名证书处获取cert
和key
文件。
安装 OpenShift CLI (oc
)。
创建 Kubernetes TLS 密钥
$ oc create secret tls <tls_secret_name> --cert=<path_to_certificate_file> --key=<path_to_key_file>
将networking.internal.knative.dev/certificate-uid: <id>
标签添加到 Kubernetes TLS 密钥
$ oc label secret <tls_secret_name> networking.internal.knative.dev/certificate-uid="<id>"
如果您使用的是第三方密钥提供商(例如cert-manager
),您可以配置您的密钥管理器自动为 Kubernetes TLS 密钥添加标签。cert-manager
用户可以使用提供的密钥模板自动生成带有正确标签的密钥。在这种情况下,密钥过滤仅基于密钥进行,但此值可以携带有用的信息,例如密钥包含的证书 ID。
Red Hat OpenShift 的 cert-manager 运算符是技术预览功能。有关更多信息,请参阅**安装 Red Hat OpenShift 的 cert-manager 运算符**文档。 |
更新DomainMapping
CR 以使用您创建的 TLS 密钥
apiVersion: serving.knative.dev/v1beta1
kind: DomainMapping
metadata:
name: <domain_name>
namespace: <namespace>
spec:
ref:
name: <service_name>
kind: Service
apiVersion: serving.knative.dev/v1
# TLS block specifies the secret to be used
tls:
secretName: <tls_secret_name>
验证DomainMapping
CR 状态是否为True
,并且输出的URL
列是否显示带有https
方案的已映射域
$ oc get domainmapping <domain_name>
NAME URL READY REASON
example.com https://example.com True
可选:如果服务公开对外,请通过运行以下命令验证其是否可用
$ curl https://<domain_name>
如果证书是自签名的,请通过向curl
命令添加-k
标志来跳过验证。
默认情况下,Kubernetes client-go
库的informers实现会获取特定类型的所有资源。当存在许多资源时,这可能会导致相当大的开销,这可能会导致 Knative net-kourier
入口控制器在大型集群上由于内存泄漏而失败。但是,Knative net-kourier
入口控制器提供了一种过滤机制,使控制器能够仅获取与 Knative 相关的密钥。
密钥过滤在 OpenShift Serverless 运算符端默认启用。默认情况下,环境变量ENABLE_SECRET_INFORMER_FILTERING_BY_CERT_UID=true
会添加到net-kourier
控制器 pod 中。
如果启用密钥过滤,则所有密钥都需要用 |
您在 OpenShift Container Platform 上具有集群管理员权限,或者您在 Red Hat OpenShift Service on AWS 或 OpenShift Dedicated 上具有集群或专用管理员权限。
您创建的项目或您拥有创建应用程序和其他工作负载的角色和权限的项目。
安装 OpenShift Serverless 运算符和 Knative Serving。
安装 OpenShift CLI (oc
)。
您可以通过在KnativeServing
自定义资源 (CR) 中使用workloads
字段,将ENABLE_SECRET_INFORMER_FILTERING_BY_CERT_UID
变量设置为false
来禁用密钥过滤。
apiVersion: operator.knative.dev/v1beta1
kind: KnativeServing
metadata:
name: knative-serving
namespace: knative-serving
spec:
...
workloads:
- env:
- container: controller
envVars:
- name: ENABLE_SECRET_INFORMER_FILTERING_BY_CERT_UID
value: 'false'
name: net-kourier-controller