$ openssl rsa -in password_protected_tls.key -out tls.key
Secure routes provide the ability to use several types of TLS termination to serve certificates to the client. The following sections describe how to create re-encrypt, edge, and passthrough routes with custom certificates.
If you create routes in Microsoft Azure through public endpoints, the resource names are subject to restriction. You cannot create resources that use certain terms. For a list of terms that Azure restricts, see Resolve reserved resource name errors in the Azure documentation. |
You can configure a secure route using reencrypt TLS termination with a custom
certificate by using the oc create route
command.
You must have a certificate/key pair in PEM-encoded files, where the certificate is valid for the route host.
You may have a separate CA certificate in a PEM-encoded file that completes the certificate chain.
You must have a separate destination CA certificate in a PEM-encoded file.
You must have a service that you want to expose.
Password protected key files are not supported. To remove a passphrase from a key file, use the following command:
|
This procedure creates a Route
resource with a custom certificate and
reencrypt TLS termination. The following assumes that the certificate/key pair
are in the tls.crt
and tls.key
files in the current working directory. You
must also specify a destination CA certificate to enable the Ingress Controller
to trust the service’s certificate. You may also specify a CA certificate if
needed to complete the certificate chain. Substitute the actual path names for
tls.crt
, tls.key
, cacert.crt
, and (optionally) ca.crt
. Substitute the
name of the Service
resource that you want to expose for frontend
.
Substitute the appropriate hostname for www.example.com
.
Create a secure Route
resource using reencrypt TLS termination and a custom
certificate:
$ oc create route reencrypt --service=frontend --cert=tls.crt --key=tls.key --dest-ca-cert=destca.crt --ca-cert=ca.crt --hostname=www.example.com
If you examine the resulting Route
resource, it should look similar to the
following:
apiVersion: route.openshift.io/v1
kind: Route
metadata:
name: frontend
spec:
host: www.example.com
to:
kind: Service
name: frontend
tls:
termination: reencrypt
key: |-
-----BEGIN PRIVATE KEY-----
[...]
-----END PRIVATE KEY-----
certificate: |-
-----BEGIN certificate-----
[...]
-----END certificate-----
cacertificate: |-
-----BEGIN certificate-----
[...]
-----END certificate-----
destinationCAcertificate: |-
-----BEGIN certificate-----
[...]
-----END certificate-----
See oc create route reencrypt --help
for more options.
You can configure a secure route using edge TLS termination with a custom
certificate by using the oc create route
command. With an edge route, the
Ingress Controller terminates TLS encryption before forwarding traffic to the
destination pod. The route specifies the TLS certificate and key that the
Ingress Controller uses for the route.
You must have a certificate/key pair in PEM-encoded files, where the certificate is valid for the route host.
You may have a separate CA certificate in a PEM-encoded file that completes the certificate chain.
You must have a service that you want to expose.
Password protected key files are not supported. To remove a passphrase from a key file, use the following command:
|
This procedure creates a Route
resource with a custom certificate and edge TLS
termination. The following assumes that the certificate/key pair are in the
tls.crt
and tls.key
files in the current working directory. You may also
specify a CA certificate if needed to complete the certificate chain.
Substitute the actual path names for tls.crt
, tls.key
, and (optionally)
ca.crt
. Substitute the name of the service that you want to expose
for frontend
. Substitute the appropriate hostname for www.example.com
.
Create a secure Route
resource using edge TLS termination and a custom certificate.
$ oc create route edge --service=frontend --cert=tls.crt --key=tls.key --ca-cert=ca.crt --hostname=www.example.com
If you examine the resulting Route
resource, it should look similar to the
following:
apiVersion: route.openshift.io/v1
kind: Route
metadata:
name: frontend
spec:
host: www.example.com
to:
kind: Service
name: frontend
tls:
termination: edge
key: |-
-----BEGIN PRIVATE KEY-----
[...]
-----END PRIVATE KEY-----
certificate: |-
-----BEGIN certificate-----
[...]
-----END certificate-----
cacertificate: |-
-----BEGIN certificate-----
[...]
-----END certificate-----
See oc create route edge --help
for more options.
You can configure a secure route using passthrough termination by using the oc create route
command. With passthrough termination, encrypted traffic is sent straight to the destination without the router providing TLS termination. Therefore no key or certificate is required on the route.
You must have a service that you want to expose.
Create a Route
resource:
$ oc create route passthrough route-passthrough-secured --service=frontend --port=8080
If you examine the resulting Route
resource, it should look similar to the following:
apiVersion: route.openshift.io/v1
kind: Route
metadata:
name: route-passthrough-secured (1)
spec:
host: www.example.com
port:
targetPort: 8080
tls:
termination: passthrough (2)
insecureEdgeTerminationPolicy: None (3)
to:
kind: Service
name: frontend
1 | The name of the object, which is limited to 63 characters. |
2 | The termination field is set to passthrough . This is the only required tls field. |
3 | Optional insecureEdgeTerminationPolicy . The only valid values are None , Redirect , or empty for disabled. |
The destination pod is responsible for serving certificates for the traffic at the endpoint. This is currently the only method that can support requiring client certificates, also known as two-way authentication.
Securing route with external certificates in TLS secrets is a Technology Preview feature only. Technology Preview features are not supported with Red Hat production service level agreements (SLAs) and might not be functionally complete. Red Hat does not recommend using them in production. These features provide early access to upcoming product features, enabling customers to test functionality and provide feedback during the development process. For more information about the support scope of Red Hat Technology Preview features, see Technology Preview Features Support Scope. |
You can configure OKD routes with third-party certificate management solutions by using the .spec.tls.externalcertificate
field of the route API. You can reference externally managed TLS certificates via secrets, eliminating the need for manual certificate management. Using the externally managed certificate reduces errors ensuring a smoother rollout of certificate updates, enabling the OpenShift router to serve renewed certificates promptly.
This feature applies to both edge routes and re-encrypt routes. |
You must enable the RouteExternalcertificate
feature gate.
You must have the create
and update
permissions on the routes/custom-host
.
You must have a secret containing a valid certificate/key pair in PEM-encoded format of type kubernetes.io/tls
, which includes both tls.key
and tls.crt
keys.
You must place the referenced secret in the same namespace as the route you want to secure.
Create a role
in the same namespace as the secret to allow the router service account read access by running the following command:
$ oc create role secret-reader --verb=get,list,watch --resource=secrets --resource-name=<secret-name> \ (1)
--namespace=<current-namespace> (2)
1 | Specify the actual name of your secret. |
2 | Specify the namespace where both your secret and route reside. |
Create a rolebinding
in the same namespace as the secret and bind the router service account to the newly created role by running the following command:
$ oc create rolebinding secret-reader-binding --role=secret-reader --serviceaccount=openshift-ingress:router --namespace=<current-namespace> (1)
1 | Specify the namespace where both your secret and route reside. |
Create a YAML file that defines the route
and specifies the secret containing your certificate using the following example.
apiVersion: route.openshift.io/v1
kind: Route
metadata:
name: myedge
namespace: test
spec:
host: myedge-test.apps.example.com
tls:
externalcertificate:
name: <secret-name> (1)
termination: edge
[...]
[...]
1 | Specify the actual name of your secret. |
Create a route
resource by running the following command:
$ oc apply -f <route.yaml> (1)
1 | Specify the generated YAML filename. |
If the secret exists and has a certificate/key pair, the router will serve the generated certificate if all prerequisites are met.
If You cannot provide the |
For troubleshooting routes with externally managed certificates, check the OKD router pod logs for errors, see Investigating pod issues.