Skip to content

Commit f25e8f7

Browse files
Merge pull request #11260 from zlogic/DES-7471_release-mxok-v2.27.0
Release notes and documentation updates for Mendix on Kubernetes v2.27.0 (planned for release on June 1)
2 parents cb9bb56 + 56491f8 commit f25e8f7

11 files changed

Lines changed: 310 additions & 151 deletions

File tree

content/en/docs/deployment/private-cloud/private-cloud-cluster/_index.md

Lines changed: 49 additions & 117 deletions
Original file line numberDiff line numberDiff line change
@@ -216,123 +216,7 @@ If an app's MDA was built using a newer Java version, Mendix Operator 2.15.0 (an
216216

217217
### Endpoint (network) Configuration {#advanced-network-settings}
218218

219-
The OperatorConfiguration contains the following user-editable options for network configuration:
220-
221-
When using **Ingress** for network endpoints:
222-
223-
```yaml
224-
apiVersion: privatecloud.mendix.com/v1alpha1
225-
kind: OperatorConfiguration
226-
# ...
227-
# omitted lines for brevity
228-
# ...
229-
spec:
230-
# Endpoint (Network) configuration
231-
endpoint:
232-
# Endpoint type: ingress, openshiftRoute or service
233-
type: ingress
234-
# Optional, can be omitted: Service annotations
235-
serviceAnnotations:
236-
# example: custom AWS CLB configuration
237-
service.beta.kubernetes.io/aws-load-balancer-backend-protocol: tcp
238-
service.beta.kubernetes.io/aws-load-balancer-ssl-cert: arn:aws:acm:eu-west-1:account:certificate/id
239-
service.beta.kubernetes.io/aws-load-balancer-ssl-ports: "443"
240-
# Ingress configuration: used only when type is set to ingress
241-
ingress:
242-
# Optional, can be omitted: annotations which should be applied to all Ingress Resources
243-
annotations:
244-
# default annotation: allow uploads of files up 500 MB in the NGINX Ingress Controller
245-
nginx.ingress.kubernetes.io/proxy-body-size: 500m
246-
# example: use the specified cert-manager ClusterIssuer to generate TLS certificates with Let's Encrypt
247-
cert-manager.io/cluster-issuer: staging-issuer
248-
# example: deny access to /rest-doc
249-
nginx.ingress.kubernetes.io/configuration-snippet: |
250-
location /rest-doc {
251-
deny all;
252-
return 403;
253-
}
254-
# App URLs will be generated for subdomains of this domain, unless an app is using a custom appURL
255-
domain: mendix.example.com
256-
# Enable or disable TLS
257-
enableTLS: true
258-
# Optional: name of a kubernetes.io/tls secret containing the TLS certificate
259-
# This example is a template which lets cert-manager to generate a unique certificate for each app
260-
tlsSecretName: '{{.Name}}-tls'
261-
# Optional: specify the Ingress class name
262-
ingressClassName: alb
263-
# Optional, can be omitted : specify the Ingress path
264-
path: "/"
265-
# Optional, can be omitted : specify the Ingress pathType
266-
pathType: ImplementationSpecific
267-
# ...
268-
# omitted lines for brevity
269-
# ...
270-
```
271-
272-
When using **OpenShift Routes** for network endpoints:
273-
274-
```yaml
275-
apiVersion: privatecloud.mendix.com/v1alpha1
276-
kind: OperatorConfiguration
277-
spec:
278-
# Endpoint (Network) configuration
279-
endpoint:
280-
# Endpoint type: ingress, openshiftRoute, or service
281-
type: openshiftRoute
282-
# OpenShift Route configuration: used only when type is set to openshiftRoute
283-
openshiftRoute:
284-
# Optional, can be omitted: annotations which should be applied to all Ingress Resources
285-
annotations:
286-
# example: use HSTS headers
287-
haproxy.router.openshift.io/hsts_header: max-age=31536000;includeSubDomains;preload
288-
# Optional: App URLs will be generated for subdomains of this domain, unless an app is using a custom appURL
289-
domain: mendix.example.com
290-
# Enable or disable TLS
291-
enableTLS: true
292-
# Optional: name of a kubernetes.io/tls secret containing the TLS certificate
293-
# This example is the name of an existing secret, which should be a wildcard matching subdomains of the domain name
294-
tlsSecretName: 'mendixapps-tls'
295-
```
296-
297-
When using **Services** for network endpoints (without an Ingress or OpenShift route):
298-
299-
```yaml
300-
apiVersion: privatecloud.mendix.com/v1alpha1
301-
kind: OperatorConfiguration
302-
spec:
303-
# Endpoint (Network) configuration
304-
endpoint:
305-
# Endpoint type: ingress, openshiftRoute, or service
306-
type: service
307-
# Optional, can be omitted: the Service type
308-
serviceType: LoadBalancer
309-
# Optional, can be omitted: Service annotations
310-
serviceAnnotations:
311-
# example: annotations required for AWS NLB
312-
service.beta.kubernetes.io/aws-load-balancer-type: external
313-
service.beta.kubernetes.io/aws-load-balancer-nlb-target-type: ip
314-
service.beta.kubernetes.io/aws-load-balancer-scheme: internet-facing
315-
# Optional, can be omitted: Service ports
316-
servicePorts:
317-
- 80
318-
- 443
319-
```
320-
321-
You can change the following options:
322-
323-
* **type**: – select the Endpoint type, possible options are `ingress`, `openshiftRoute` and `service`; this parameter is also configured through the **Configuration Tool**
324-
* **ingress**: - specify the Ingress configuration, required when **type** is set to `ingress`
325-
* **openshiftRoute**: - specify the OpenShift Route configuration, required when **type** is set to `openshiftRoute`
326-
* **annotations**: - optional, can be used to specify the Ingress or OpenShift Route annotations, can be a template: `{{.Name}}` will be replaced with the name of the CR for the Mendix app, and {{.Domain}} will be replaced with the application's domain name
327-
* **serviceAnnotations**: - optional, can be used to specify the Service annotations, can be a template: `{{.Name}}` will be replaced with the name of the CR for the Mendix app, and {{.Domain}} will be replaced with the application's domain name
328-
* **ingressClassName**: - optional, can be used to specify the Ingress Class name
329-
* **path**: - optional, can be used to specify the Ingress path; default value is `/`
330-
* **pathType**: - optional, can be used to specify the Ingress pathType; if not set, no pathType will be specified in Ingress objects
331-
* **domain**: - optional for `openshiftRoute`, required for `ingress`, used to generate the app domain in case no app URL is specified; if left empty when using OpenShift Routes, the default OpenShift `apps` domain will be used; this parameter is also configured through the **Configuration Tool**
332-
* **enableTLS**: - allows you to enable or disable TLS for the Mendix App's Ingress or OpenShift Route
333-
* **tlsSecretName**: - optional name of a `kubernetes.io/tls` secret containing the TLS certificate, can be a template: `{{.Name}}` will be replaced with the name of the CR for the Mendix app; if left empty, the default TLS certificate from the Ingress Controller or OpenShift Router will be used
334-
* **serviceType**: - can be used to specify the Service type, possible options are `ClusterIP` and `LoadBalancer`; if not specified, Services will be created with the `ClusterIP` type
335-
* **servicePorts**: - can be used to specify a list of custom ports for the Service; if not specified, Services will use be created with port `8080`
219+
For information on using advanced network configuration settings, see [Network Ingress Settings section](/developerportal/deploy/private-cloud-cluster/private-cloud-ingress-settings/).
336220

337221
{{% alert color="info" %}}
338222
When switching between Ingress and OpenShift Routes, you need to [restart the Mendix Operator](#restart-after-changing-network-cr) for the changes to be fully applied.
@@ -938,6 +822,54 @@ Alternatively, for Standalone clusters, pod labels can be specified in the `Mend
938822
The Mendix Operator uses some labels for internal use. To avoid conflicts with these internal pod labels, please avoid using labels starting with the `privatecloud.mendix.com/` prefix.
939823
{{% /alert %}}
940824

825+
### Pod Annotations (General) {#pod-annotations}
826+
827+
Mendix Operator version 2.27.0 or above allows you to specify default pod annotations for task pods (build and storage provisioners) and runtime (app) pods.
828+
829+
To specify the default pod annotations for a namespace, specify them in `customPodAnnotations.general` in `OperatorConfiguration`:
830+
831+
```yaml
832+
apiVersion: privatecloud.mendix.com/v1alpha1
833+
kind: OperatorConfiguration
834+
spec:
835+
# ...
836+
# Other configuration options values
837+
# Optional: custom pod annotations
838+
customPodAnnotations:
839+
# Optional: general pod annotations (applied to all app-related pods)
840+
general:
841+
# Example: use FQDN instead of IP addresses when communicating with the Kubernetes API server
842+
kubernetes.azure.com/set-kube-service-host-fqdn: "true"
843+
```
844+
845+
Alternatively, for Standalone clusters, pod annotations for an app can be specified in the `MendixApp` CR.
846+
847+
{{% alert color="warning" %}}
848+
The Mendix Operator uses some annotations for internal use. To avoid conflicts with these internal pod annotations, please avoid using labels starting with the `privatecloud.mendix.com/` prefix.
849+
{{% /alert %}}
850+
851+
### Node Selector (General) {#node-selector}
852+
853+
Mendix Operator version 2.27.0 or above allows you to specify the default `nodeSelector` for task pods (build and storage provisioners) and runtime (app) pods.
854+
855+
To configure the default pod `nodeSelector` for a namespace, specify them in `customPodNodeSelector.general` in `OperatorConfiguration`:
856+
857+
```yaml
858+
apiVersion: privatecloud.mendix.com/v1alpha1
859+
kind: OperatorConfiguration
860+
spec:
861+
# ...
862+
# Other configuration options values
863+
# Optional: custom pod nodeSelector
864+
customPodNodeSelector:
865+
# Optional: general pod nodeSelector (applied to all app-related pods)
866+
general:
867+
# Example: use Amazon EKS Auto Mode
868+
eks.amazonaws.com/compute-type: auto
869+
```
870+
871+
Alternatively, for Standalone clusters, pod `nodeSelector` configuration can be specified in the `MendixApp` CR for a specific app.
872+
941873
### Delaying App Shutdown {#termination-delay}
942874

943875
In some situations, shutting down a replica immediately can cause isses. For example, the [Azure Gateway Ingress Controller](https://azure.github.io/application-gateway-kubernetes-ingress/how-tos/minimize-downtime-during-deployments/) needs up to 90 seconds to remove a pod from its routing table. Stopping an app pod immediately would still send traffic to the pod for a few minutes, causing random 502 errors to appear in the client web browser.

content/en/docs/deployment/private-cloud/private-cloud-cluster/networking/_index.md

Lines changed: 18 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ weight: 10
88

99
## Introduction
1010

11-
Based on your organization's networking and security needs, you must configure the available networking components of your Mendix web applications to be accessible to end users, either over a private network or the Internet. This article describes three possible network configurations: Kubernetes Ingress, OpenShift Routes, and Service-Only. Each configuration is tailored to meet specific use cases.
11+
Based on your organization's networking and security needs, you must configure the available networking components of your Mendix web applications to be accessible to end users, either over a private network or the Internet. This article describes three possible network configurations: Kubernetes Ingress, Gateway Routes, OpenShift Routes, and Service-Only. Each configuration is tailored to meet specific use cases.
1212

1313
## Prerequisites
1414

@@ -22,6 +22,8 @@ Mendix on Kubernetes supports the following Ingress configurations:
2222

2323
{{< figure src="/attachments/deployment/private-cloud/private-cloud-cluster/private-cloud-networking/k8s-ingress.png" class="no-border" >}}
2424

25+
* [Gateway Routes](/developerportal/deploy/private-cloud-cluster/private-cloud-ingress-settings/gateway-route/) - A next generation Kubernetes standard for Ingresses and load balancing. Supported by Mendix Operator v2.27.0 or later versions.
26+
2527
* [OpenShift Routes](/developerportal/deploy/private-cloud-cluster/private-cloud-ingress-settings/openshift/) - The OpenShift-native method for exposing services externally provides a more streamlined setup, though it offers less flexibility compared to Kubernetes Ingress.
2628

2729
{{< figure src="/attachments/deployment/private-cloud/private-cloud-cluster/private-cloud-networking/openshift-routes.png" class="no-border" >}}
@@ -42,17 +44,17 @@ The following table compares the functionality of the three supported options, i
4244
When switching between Ingress, OpenShift Routes, and Service Only, you must restart the Mendix Operator for the changes to be fully applied.
4345
{{% /alert %}}
4446

45-
| Feature | Kubernetes Ingress | Openshift Routes | Service Only |
46-
| --- | --- | --- | --- |
47-
| Ease of use | Requires setup, but offers more flexibility. | Simplest option for OpenShift users, built-in. | Fine-grained control over networking and security offers maximum flexibility, but requires significant effort and expertise to configure and maintain. Note that the networking setup beyond the Mendix Operator's scope, up to the service object, is not supported by Mendix. |
48-
| Native cloud integration | Can integrate with cloud-native services like AWS Application Load Balancer. | No direct integration with cloud providers. | Full control over networking setup. |
49-
| Performance and scalability | Scales with cloud load balancers, better supports horizontal scaling. | Limited to OpenShift Router performance. | Full flexibility - scales according to your load balancer and proxy setup. |
50-
| Supported providers | [NGINX Ingress Controller](https://kubernetes.github.io/ingress-nginx/); [Traefik](https://traefik.io/traefik/); [AWS Application Load Balancer](https://docs.aws.amazon.com/eks/latest/userguide/alb-ingress.html); [Ingress for External Application Load Balancer](https://cloud.google.com/kubernetes-engine/docs/concepts/ingress-xlb); [Azure Application Gateway Ingress Controller](https://learn.microsoft.com/en-us/azure/application-gateway/ingress-controller-overview) | [OpenShift Router (HAProxy-based Ingress Controller)](https://docs.openshift.com/container-platform/4.17/networking/networking_operators/ingress-operator.html) | None |
51-
| TLS/SSL termination | Can leverage cloud provider-managed TLS; supports Cert-Manager. | Supported with OpenShift's HAProxy router. | Fully flexible but requires manual setup; TLS can terminate at application load balancer, network load balancer, or app level |
52-
| Security (WAF, ACLs, Auth) | More advanced security integrations (for example AWS Web Application Firewall, authentication). | Basic access control via OpenShift OAuth. | Full control - can integrate with AWS Web Application Firewall, API Gateway, authentication proxies with manual configuration. |
53-
| Traffic splitting | Fully supported through ingress rules. | Supported through HAProxy-based Route annotations. | Depends on external networking setup. |
54-
| External DNS support | Some ingress controllers (for example, application load balancers) support native DNS updates. | Requires ExternalDNS integration. | Fully configurable - can use ExternalDNS, Amazon Route 53, or others. |
55-
| Custom annotations | Supports Kubernetes Ingress annotations, provider-specific features.| Supports OpenShift-specific annotations. | No restrictions - fully customizable in external networking. |
47+
| Feature | Kubernetes Ingress | Gateway Routes | Openshift Routes | Service Only |
48+
| --- | --- | --- | --- | --- |
49+
| Ease of use | Requires setup, but offers more flexibility. | Requires setup, offers flexibility with separation of scope by [roles and personas](https://gateway-api.sigs.k8s.io/docs/concepts/roles-and-personas/) | Simplest option for OpenShift users, built-in. | Fine-grained control over networking and security offers maximum flexibility, but requires significant effort and expertise to configure and maintain. Note that the networking setup beyond the Mendix Operator's scope, up to the service object, is not supported by Mendix. |
50+
| Native cloud integration | Can integrate with cloud-native services like AWS Application Load Balancer. | Can integrate with cloud-native services like AWS Application Load Balancer. | No direct integration with cloud providers. | Full control over networking setup. |
51+
| Performance and scalability | Scales with cloud load balancers, better supports horizontal scaling. | Scales with cloud load balancers, better supports horizontal scaling. | Limited to OpenShift Router performance. | Full flexibility - scales according to your load balancer and proxy setup. |
52+
| Supported providers | [NGINX Ingress Controller](https://kubernetes.github.io/ingress-nginx/); [Traefik](https://traefik.io/traefik/); [AWS Application Load Balancer](https://docs.aws.amazon.com/eks/latest/userguide/alb-ingress.html); [Ingress for External Application Load Balancer](https://cloud.google.com/kubernetes-engine/docs/concepts/ingress-xlb); [Azure Application Gateway Ingress Controller](https://learn.microsoft.com/en-us/azure/application-gateway/ingress-controller-overview) | [Gateway API v1.4 compliant implementations](https://gateway-api.sigs.k8s.io/docs/implementations/versions/v1.4/) | [OpenShift Router (HAProxy-based Ingress Controller)](https://docs.openshift.com/container-platform/4.17/networking/networking_operators/ingress-operator.html) | None |
53+
| TLS/SSL termination | Can leverage cloud provider-managed TLS; supports Cert-Manager. | Configured in the Gateway [listener](https://gateway-api.sigs.k8s.io/guides/user-guides/tls/#listeners-and-tls) by the cluster operator | Supported with OpenShift's HAProxy router. | Fully flexible but requires manual setup; TLS can terminate at application load balancer, network load balancer, or app level |
54+
| Security (WAF, ACLs, Auth) | More advanced security integrations (for example AWS Web Application Firewall, authentication). | Provided by the Gateway implementation | Basic access control via OpenShift OAuth. | Full control - can integrate with AWS Web Application Firewall, API Gateway, authentication proxies with manual configuration. |
55+
| Traffic splitting | Fully supported through ingress rules. | Fully supported. | Supported through HAProxy-based Route annotations. | Depends on external networking setup. |
56+
| External DNS support | Some ingress controllers (for example, application load balancers) support native DNS updates. | Fully configurable - can use ExternalDNS, Amazon Route 53, or others. | Requires ExternalDNS integration. | Fully configurable - can use ExternalDNS, Amazon Route 53, or others. |
57+
| Custom annotations | Supports Kubernetes Ingress annotations, provider-specific features. | Gateway implementations typically use vendor-specific CRDs, annotations are supported as well. | Supports OpenShift-specific annotations. | No restrictions - fully customizable in external networking. |
5658

5759
## Recommended Configuration
5860

@@ -75,6 +77,9 @@ While OpenShift Routes are a viable option, we recommend NGINX Ingress Controlle
7577
OpenShift Routes remain a suitable choice if meet your current needs and you do not require advanced features.
7678
{{% /alert %}}
7779

80+
If your cluster has a configured and working Gateway API implementation, using it might be a preferrable option.
81+
The Gateway API standardized typical use cases, and the Mendix Operator only uses HTTPRoute features defined in the [v1.4 standard](https://gateway-api.sigs.k8s.io/reference/api-spec/1.4/spec/), without relying on any vendor-specific feature.
82+
7883
## Known Issues
7984

8085
* AWS Application Load Balancers do not work correctly with HTTP2 WebSockets.
@@ -83,3 +88,4 @@ OpenShift Routes remain a suitable choice if meet your current needs and you do
8388

8489
* Some application load balancer firewall rules can block file uploads or other Mendix app features.
8590
* Linkerd does not work correctly with AWS Application Load Balancer and Azure Gateway Ingress Controller.
91+
* Some Gateway API implementations do not fully implement the base v1.4 spec, or are experimental (unsupported).

content/en/docs/deployment/private-cloud/private-cloud-cluster/networking/private-cloud-advanced-ingress-settings.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ title: "Advanced Ingress Settings in Mendix on Kubernetes"
33
linktitle: "Advanced Settings"
44
url: /developerportal/deploy/private-cloud-cluster/private-cloud-ingress-settings/advanced/
55
description: "Describes how to configure advanced Ingress settings."
6-
weight: 40
6+
weight: 50
77
---
88

99
## Introduction

0 commit comments

Comments
 (0)