This is an automated email from the ASF dual-hosted git repository.

wangyang0918 pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/flink-kubernetes-operator.git


The following commit(s) were added to refs/heads/main by this push:
     new 3906e66  [FLINK-26817] Update ingress docs with templating examples
3906e66 is described below

commit 3906e66416fd933d091cfa840c4e24cbcf419d41
Author: Matyas Orhidi <matyas_orh...@apple.com>
AuthorDate: Wed Mar 23 21:39:35 2022 +0100

    [FLINK-26817] Update ingress docs with templating examples
---
 docs/content/docs/operations/ingress.md | 80 +++++++++++++++++++++++++++------
 1 file changed, 66 insertions(+), 14 deletions(-)

diff --git a/docs/content/docs/operations/ingress.md 
b/docs/content/docs/operations/ingress.md
index ff92eea..4850bf8 100644
--- a/docs/content/docs/operations/ingress.md
+++ b/docs/content/docs/operations/ingress.md
@@ -25,33 +25,85 @@ under the License.
 -->
 
 # Accessing Flinkā€™s Web UI
-
 The Flink Kubernetes Operator, by default, does not change the way the native 
kubernetes integration 
[exposes](https://nightlies.apache.org/flink/flink-docs-master/docs/deployment/resource-providers/native_kubernetes/#accessing-flinks-web-ui)
 the Flink Web UI.
 
 # Ingress
-The Operator also supports creating an optional 
[Ingress](https://kubernetes.io/docs/concepts/services-networking/ingress/) 
entry for Web UI access. Ingress generation can be turned on by setting the 
`ingressDomain` field in the FlinkDeployment:
-
+Beyond the native options, the Operator also supports creating 
[Ingress](https://kubernetes.io/docs/concepts/services-networking/ingress/) 
entries for external UI access. 
+Ingress generation can be turned on by defining the `ingress` field in the 
`FlinkDeployment`:
 ```yaml
-apiVersion: flink.apache.org/v1alpha1
-kind: FlinkDeployment
 metadata:
   namespace: default
-  name: basic-ingress
+  name: advanced-ingress
 spec:
   image: flink:1.14.3
   flinkVersion: v1_14
-  ingressDomain: flink.k8s.io
-  ...
+  ingress:
+    template: "flink.k8s.io/{{namespace}}/{{name}}(/|$)(.*)"
+    className: "nginx"
+    annotations:
+      nginx.ingress.kubernetes.io/rewrite-target: "/$2"
+```
+The `ingress` specification defines a mandatory `template` field and two 
optional fields `className` and `annotations`. 
+When the CR is submitted, the Operator substitutes the template variables from 
metadata and creates an Ingress entry on the Kubernetes cluster.  
+Given the example above the Flink UI could be accessed at 
https://flink.k8s.io/default/advanced-ingress/ and the generated Ingress entry 
would be:
+```yaml
+apiVersion: networking.k8s.io/v1
+  kind: Ingress
+  metadata:
+    annotations:
+      nginx.ingress.kubernetes.io/rewrite-target: /$2    
+    name: advanced-ingress
+    namespace: default   
+  spec:
+    ingressClassName: nginx
+    rules:
+    - host: flink.k8s.io
+    - http:
+        paths:
+        - backend:
+            service:
+              name: advanced-ingress-rest
+              port:
+                number: 8081
+          path: /default/advanced-ingress(/|$)(.*)
+          pathType: ImplementationSpecific
 ```
 
-The Operator takes the `name`, `namespace` and `ingressDomain` values from the 
CR and creates an Ingress entry using the template 
`{{name}}.{{namespace}}.{{ingressDomain}}` as the host. This requires that 
anything `*.flink.k8s.io` should be routed to the Ingress Controller on the 
Kubernetes cluster.
+>Note: Flink Web UI is built with the popular [Angular](https://angular.io) 
framework and uses relative path to load static resources, hence the endpoint 
URL must end with trailing a `/` when accessing it from browsers through a 
proxy otherwise the main page appears as blank. 
+> In order to support accessing base URLs without a trailing `/` the URLs can 
be [redirected](https://github.com/kubernetes/ingress-nginx/issues/4266). When 
using NGINX as ingress-controller this can be achieved by adding an extra 
annotation to the Ingress definition:
+```yaml
+nginx.ingress.kubernetes.io/configuration-snippet: |
+if ($uri = "/default/advanced-ingress") {rewrite .* 
$1/default/advanced-ingress/ permanent;}
+```
+Beyond the example above the Operator understands other template formats too:
 
+**Simple domain based routing:**
+```yaml
+ingress:
+  template: "{{name}}.{{namespace}}.flink.k8s.io"    
+```
+This example requires that anything `*.flink.k8s.io` must be routed to the 
Ingress Controller with a wildcard DNS entry:
 ```shell
-kubectl get ingress
-NAME             CLASS   HOSTS                                 ADDRESS        
PORTS   AGE
-basic-ingress    nginx   basic-ingress.default.flink.k8s.io    192.168.49.2   
80      30m
-basic-ingress2   nginx   basic-ingress2.default.flink.k8s.io   192.168.49.2   
80      3m39s
+kubectl get ingress -A
+NAMESPACE   NAME             CLASS   HOSTS                                 
ADDRESS        PORTS   AGE
+default     sample-job       nginx   sample-job.default.flink.k8s.io       
192.168.49.2   80      30m
+```
+The Flink Web UI can be accessed at https://sample-job.default.flink.k8s.io
+
+**Simple path based routing:**
+```yaml
+ingress:
+  template: "/{{namespace}}/{{name}}(/|$)(.*)"    
+  annotations:
+    nginx.ingress.kubernetes.io/rewrite-target: "/$2"
 ```
+This example requires no DNS entries. 
 
-The examples above were created on a minikube cluster. Check the 
[description](https://kubernetes.io/docs/tasks/access-application-cluster/ingress-minikube/)
 for easily enabling the NGINX Ingress Controller on minikube.
+```shell
+kubectl get ingress -A
+NAMESPACE   NAME               CLASS   HOSTS          ADDRESS     PORTS   AGE
+default     sample-job         nginx   *              localhost   80      54m
+```
+The Flink Web UI can be accessed at https://localhost/defalt/sample-job/
+>Note: All the examples  were created on a minikube cluster. Check the 
[description](https://kubernetes.io/docs/tasks/access-application-cluster/ingress-minikube/)
 for easily enabling the NGINX Ingress Controller on minikube.
 

Reply via email to