This section provides information about how to install and configure the ingress-based Traefik load balancer (version 2.2.1 or later for production deployments) to load balance Oracle WebCenter Content domain clusters. You can configure Traefik for non-SSL, SSL termination and end-to-end SSL access of the application URL.
Follow these steps to set up Traefik as a load balancer for an Oracle WebCenter Content domain in a Kubernetes cluster:
Use Helm to install the Traefik (ingress-based) load balancer. For detailed information, see here.
Use the values.yaml
file in the sample but set kubernetes.namespaces
specifically.
$ cd ${WORKDIR}/weblogic-kubernetes-operator
$ kubectl create namespace traefik
$ helm repo add traefik https://containous.github.io/traefik-helm-chart
Sample output:
"traefik" has been added to your repositories
Install Traefik:
$ cd ${WORKDIR}/weblogic-kubernetes-operator
$ helm install traefik traefik/traefik \
--namespace traefik \
--values kubernetes/samples/scripts/charts/traefik/values.yaml \
--set "kubernetes.namespaces={traefik}" \
--set "service.type=NodePort" --wait
A sample values.yaml
for deployment of Traefik 2.2.x:
image:
name: traefik
tag: 2.2.8
pullPolicy: IfNotPresent
ingressRoute:
dashboard:
enabled: true
# Additional ingressRoute annotations (e.g. for kubernetes.io/ingress.class)
annotations: {}
# Additional ingressRoute labels (e.g. for filtering IngressRoute by custom labels)
labels: {}
providers:
kubernetesCRD:
enabled: true
kubernetesIngress:
enabled: true
# IP used for Kubernetes Ingress endpoints
ports:
traefik:
port: 9000
expose: true
# The exposed port for this service
exposedPort: 9000
# The port protocol (TCP/UDP)
protocol: TCP
web:
port: 8000
# hostPort: 8000
expose: true
exposedPort: 30305
nodePort: 30305
# The port protocol (TCP/UDP)
protocol: TCP
# Use nodeport if set. This is useful if you have configured Traefik in a
# LoadBalancer
# nodePort: 32080
# Port Redirections
# Added in 2.2, you can make permanent redirects via entrypoints.
# https://docs.traefik.io/routing/entrypoints/#redirection
# redirectTo: websecure
websecure:
port: 8443
# # hostPort: 8443
expose: true
exposedPort: 30443
# The port protocol (TCP/UDP)
protocol: TCP
nodePort: 30443
Verify the Traefik status and find the port number of the SSL and non-SSL services:
$ kubectl get all -n traefik
Access the Traefik dashboard through the URL http://$(hostname -f):32306
, with the HTTP host traefik.example.com
:
$ curl -H "host: $(hostname -f)" http://$(hostname -f):32306/dashboard/
Note: Make sure that you specify a fully qualified node name for
$(hostname -f)
Configure Traefik to manage ingresses created in this namespace, where traefik
is the Traefik namespace and wccns
is the namespace of the domain:
$ helm upgrade traefik traefik/traefik --namespace traefik --reuse-values \
--set "kubernetes.namespaces={traefik,wccns}"
Create an ingress for the domain in the domain namespace by using the sample Helm chart. Here path-based routing is used for ingress.
Sample values for default configuration are shown in the file ${WORKDIR}/weblogic-kubernetes-operator/kubernetes/samples/charts/ingress-per-domain/values.yaml
.
By default, type
is TRAEFIK
, tls
is Non-SSL
, and domainType
is wccinfra
. These values can be overridden by passing values through the command line or can be edited in the sample file values.yaml
based on the type of configuration (non-SSL or SSL).
If needed, you can update the ingress YAML file to define more path rules (in section spec.rules.host.http.paths
) based on the domain application URLs that need to be accessed. The template YAML file for the Traefik (ingress-based) load balancer is located at ${WORKDIR}/weblogic-kubernetes-operator/kubernetes/samples/charts/ingress-per-domain/templates/traefik-ingress.yaml
Install ingress-per-domain
using Helm for non-SSL configuration:
$ cd ${WORKDIR}/weblogic-kubernetes-operator
$ helm install wcc-traefik-ingress \
kubernetes/samples/charts/ingress-per-domain \
--set type=TRAEFIK \
--namespace wccns \
--values kubernetes/samples/charts/ingress-per-domain/values.yaml \
--set "traefik.hostname=$(hostname -f)"
--set tls=NONSSL
Sample output:
NAME: wcc-traefik-ingress
LAST DEPLOYED: Sun Jan 17 23:49:09 2021
NAMESPACE: wccns
STATUS: deployed
REVISION: 1
TEST SUITE: None
For secured access (SSL) to the Oracle WebCenter Content application, create a certificate and generate a Kubernetes secret:
$ openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout /tmp/tls1.key -out /tmp/tls1.crt -subj "/CN=*"
$ kubectl -n wccns create secret tls domain1-tls-cert --key /tmp/tls1.key --cert /tmp/tls1.crt
Create Traefik Middleware custom resource
In case of SSL termination, Traefik must pass a custom header WL-Proxy-SSL:true
to the WebLogic Server endpoints. Create the Middleware using the following command:
$ cat <<EOF | kubectl apply -f -
apiVersion: traefik.containo.us/v1alpha1
kind: Middleware
metadata:
name: wls-proxy-ssl
namespace: wccns
spec:
headers:
customRequestHeaders:
WL-Proxy-SSL: "true"
EOF
Create the Traefik TLSStore custom resource.
In case of SSL termination, Traefik should be configured to use the user-defined SSL certificate. If the user-defined SSL certificate is not configured, Traefik will create a default SSL certificate. To configure a user-defined SSL certificate for Traefik, use the TLSStore custom resource. The Kubernetes secret created with the SSL certificate should be referenced in the TLSStore object. Run the following command to create the TLSStore:
$ cat <<EOF | kubectl apply -f -
apiVersion: traefik.containo.us/v1alpha1
kind: TLSStore
metadata:
name: default
namespace: wccns
spec:
defaultCertificate:
secretName: domain1-tls-cert
EOF
Install ingress-per-domain
using Helm for SSL configuration.
The Kubernetes secret name should be updated in the template file.
The template file also contains the following annotations:
traefik.ingress.kubernetes.io/router.entrypoints: websecure
traefik.ingress.kubernetes.io/router.tls: "true"
traefik.ingress.kubernetes.io/router.middlewares: wccns-wls-proxy-ssl@kubernetescrd
The entry point for SSL access and the Middleware name should be updated in the annotation. The Middleware name should be in the form <namespace>-<middleware name>@kubernetescrd
.
$ cd ${WORKDIR}/weblogic-kubernetes-operator
$ helm install wcc-traefik-ingress \
kubernetes/samples/charts/ingress-per-domain \
--set type=TRAEFIK \
--namespace wccns \
--values kubernetes/samples/charts/ingress-per-domain/values.yaml \
--set "traefik.hostname=$(hostname -f)" \
--set tls=SSL
Sample output:
NAME: wcc-traefik-ingress
LAST DEPLOYED: Mon Jul 20 11:44:13 2020
NAMESPACE: wccns
STATUS: deployed
REVISION: 1
TEST SUITE: None
For non-SSL access to the Oracle WebCenter Content application, get the details of the services by the ingress:
$ kubectl describe ingress wccinfra-traefik -n wccns
For SSL access to the Oracle WebCenter Content application, get the details of the services by the above deployed ingress:
$ kubectl describe ingress wccinfra-traefik -n wccns
$ curl -v http://${LOADBALANCER_HOSTNAME}:${LOADBALANCER_PORT}/weblogic/ready
* About to connect() to abc.com port 30305 (#0)
* Trying 100.111.156.246...
* Connected to abc.com (100.111.156.246) port 30305 (#0)
> GET /weblogic/ready HTTP/1.1
> User-Agent: curl/7.29.0
> Host: domain1.org:30305
> Accept: */*
>
< HTTP/1.1 200 OK
< Content-Length: 0
< Date: Thu, 03 Dec 2020 13:16:19 GMT
< Vary: Accept-Encoding
<
* Connection #0 to host abc.com left intact
After setting up the Traefik (ingress-based) load balancer, verify that the domain application URLs are accessible through the non-SSL load balancer port 30305
for HTTP access. The sample URLs for Oracle WebCenter Content domain of type wcc
are:
http://${LOADBALANCER_HOSTNAME}:${LOADBALANCER-Non-SSLPORT}/weblogic/ready
http://${LOADBALANCER_HOSTNAME}:${LOADBALANCER-Non-SSLPORT}/console
http://${LOADBALANCER_HOSTNAME}:${LOADBALANCER-Non-SSLPORT}/cs
http://${LOADBALANCER_HOSTNAME}:${LOADBALANCER-Non-SSLPORT}/ibr
http://${LOADBALANCER_HOSTNAME}:${LOADBALANCER-Non-SSLPORT}/em
http://${LOADBALANCER_HOSTNAME}:${LOADBALANCER-Non-SSLPORT}/imaging
http://${LOADBALANCER_HOSTNAME}:${LOADBALANCER-Non-SSLPORT}/dc-console
http://${LOADBALANCER_HOSTNAME}:${LOADBALANCER-Non-SSLPORT}/wcc
After setting up the Traefik (ingress-based) load balancer, verify that the domain applications are accessible through the SSL load balancer port 30443
for HTTPS access. The sample URLs for Oracle WebCenter Content domain are:
https://${LOADBALANCER_HOSTNAME}:${LOADBALANCER-SSLPORT}/weblogic/ready
https://${LOADBALANCER_HOSTNAME}:${LOADBALANCER-SSLPORT}/console
https://${LOADBALANCER_HOSTNAME}:${LOADBALANCER-SSLPORT}/cs
https://${LOADBALANCER_HOSTNAME}:${LOADBALANCER-SSLPORT}/ibr
https://${LOADBALANCER_HOSTNAME}:${LOADBALANCER-SSLPORT}/em
https://${LOADBALANCER_HOSTNAME}:${LOADBALANCER-SSLPORT}/imaging
https://${LOADBALANCER_HOSTNAME}:${LOADBALANCER-SSLPORT}/dc-console
https://${LOADBALANCER_HOSTNAME}:${LOADBALANCER-SSLPORT}/wcc
Uninstall and delete the ingress deployment:
$ helm delete wcc-traefik-ingress -n wccns
Use Helm to install the Traefik (ingress-based) load balancer. For detailed information, see here.
Use the values.yaml
file in the sample but set kubernetes.namespaces
specifically.
$ cd ${WORKDIR}/weblogic-kubernetes-operator
$ kubectl create namespace traefik
$ helm repo add traefik https://containous.github.io/traefik-helm-chart
Sample output:
"traefik" has been added to your repositories
Install Traefik:
$ cd ${WORKDIR}/weblogic-kubernetes-operator
$ helm install traefik traefik/traefik \
--namespace traefik \
--values kubernetes/samples/scripts/charts/traefik/values.yaml \
--set "kubernetes.namespaces={traefik}" \
--wait
Verify the Traefik operator status and find the port number of the SSL and non-SSL services:
$ kubectl get all -n traefik
Access the Traefik dashboard through the URL http://$(hostname -f):32306
, with the HTTP host traefik.example.com
:
$ curl -H "host: $(hostname -f)" http://$(hostname -f):32306/dashboard/
Note: Make sure that you specify a fully qualified node name for
$(hostname -f)
.
Configure Traefik to manage the domain application service created in this namespace, where traefik
is the Traefik namespace and wccns
is the namespace of the domain:
$ helm upgrade traefik traefik/traefik --namespace traefik --reuse-values \
--set "kubernetes.namespaces={traefik,wccns}"
To enable SSL passthrough in Traefik, you can configure a TCP router. A sample YAML for IngressRouteTCP
is available at ${WORKDIR}/weblogic-kubernetes-operator/kubernetes/samples/charts/ingress-per-domain/tls/traefik-tls.yaml
. The following should be updated in traefik-tls.yaml
:
HostSNI
rule.Sample traefik-tls.yaml
:
apiVersion: traefik.containo.us/v1alpha1
kind: IngressRouteTCP
metadata:
name: wcc-ucm-routetcp
namespace: wccns
spec:
entryPoints:
- websecure
routes:
- match: HostSNI(`${LOADBALANCER_HOSTNAME}`)
services:
- name: wccinfra-cluster-ucm-cluster
port: 16201
weight: 3
TerminationDelay: 400
tls:
passthrough: true
$ kubectl apply -f traefik-tls.yaml
Verify the access to application URLs exposed through the configured service. You should be able to access the following Oracle WebCenter Content domain URLs:
LOADBALANCER-SSLPORT is 30443
https://${LOADBALANCER_HOSTNAME}:${LOADBALANCER-SSLPORT}/console
https://${LOADBALANCER_HOSTNAME}:${LOADBALANCER-SSLPORT}/cs
https://${LOADBALANCER_HOSTNAME}:${LOADBALANCER-SSLPORT}/ibr
https://${LOADBALANCER_HOSTNAME}:${LOADBALANCER-SSLPORT}/imaging
https://${LOADBALANCER_HOSTNAME}:${LOADBALANCER-SSLPORT}/dc-console
https://${LOADBALANCER_HOSTNAME}:${LOADBALANCER-SSLPORT}/wcc
$ helm delete traefik -n wccns