Skip to content

Commit 4110389

Browse files
committed
Ref #29480: Add support for patching ingress
1 parent 7e4ccfb commit 4110389

9 files changed

Lines changed: 91 additions & 1 deletion

File tree

docs/deployment/overlays/1-namespaced/resources/shinyproxy.shinyproxy.yaml

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -78,6 +78,16 @@ spec:
7878
- op: add
7979
path: /spec/serviceAccountName
8080
value: shinyproxy-sa
81+
kubernetesIngressPatches: |
82+
- op: add
83+
path: /metadata/annotations
84+
value:
85+
nginx.ingress.kubernetes.io/proxy-buffer-size: "128k"
86+
nginx.ingress.kubernetes.io/ssl-redirect: "true"
87+
nginx.ingress.kubernetes.io/proxy-body-size: 300m
88+
- op: add
89+
path: /spec/ingressClassName
90+
value: nginx
8191
image: openanalytics/shinyproxy:3.0.0
8292
imagePullPolicy: Always
8393
fqdn: shinyproxy-demo.local

docs/deployment/overlays/2-clustered/shinyproxy-dept2/resources/shinyproxy.shinyproxy.yaml

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -77,6 +77,16 @@ spec:
7777
- op: add
7878
path: /spec/serviceAccountName
7979
value: shinyproxy-sa
80+
kubernetesIngressPatches: |
81+
- op: add
82+
path: /metadata/annotations
83+
value:
84+
nginx.ingress.kubernetes.io/proxy-buffer-size: "128k"
85+
nginx.ingress.kubernetes.io/ssl-redirect: "true"
86+
nginx.ingress.kubernetes.io/proxy-body-size: 300m
87+
- op: add
88+
path: /spec/ingressClassName
89+
value: nginx
8090
image: openanalytics/shinyproxy:3.0.0
8191
imagePullPolicy: Always
8292
fqdn: shinyproxy-demo2.local

docs/deployment/overlays/2-clustered/shinyproxy/resources/shinyproxy.shinyproxy.yaml

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -77,6 +77,16 @@ spec:
7777
- op: add
7878
path: /spec/serviceAccountName
7979
value: shinyproxy-sa
80+
kubernetesIngressPatches: |
81+
- op: add
82+
path: /metadata/annotations
83+
value:
84+
nginx.ingress.kubernetes.io/proxy-buffer-size: "128k"
85+
nginx.ingress.kubernetes.io/ssl-redirect: "true"
86+
nginx.ingress.kubernetes.io/proxy-body-size: 300m
87+
- op: add
88+
path: /spec/ingressClassName
89+
value: nginx
8090
image: openanalytics/shinyproxy:3.0.0
8191
imagePullPolicy: Always
8292
fqdn: shinyproxy-demo.local

docs/deployment/overlays/3-namespaced-app-ns/shinyproxy/resources/shinyproxy.shinyproxy.yaml

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -82,6 +82,16 @@ spec:
8282
- op: add
8383
path: /spec/serviceAccountName
8484
value: shinyproxy-sa
85+
kubernetesIngressPatches: |
86+
- op: add
87+
path: /metadata/annotations
88+
value:
89+
nginx.ingress.kubernetes.io/proxy-buffer-size: "128k"
90+
nginx.ingress.kubernetes.io/ssl-redirect: "true"
91+
nginx.ingress.kubernetes.io/proxy-body-size: 300m
92+
- op: add
93+
path: /spec/ingressClassName
94+
value: nginx
8595
image: openanalytics/shinyproxy:3.0.0
8696
imagePullPolicy: Always
8797
fqdn: shinyproxy-demo.local

docs/deployment/overlays/4-namespaced-multi/resources/shinyproxy1.shinyproxy.yaml

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -80,6 +80,16 @@ spec:
8080
- op: add
8181
path: /spec/serviceAccountName
8282
value: shinyproxy-sa
83+
kubernetesIngressPatches: |
84+
- op: add
85+
path: /metadata/annotations
86+
value:
87+
nginx.ingress.kubernetes.io/proxy-buffer-size: "128k"
88+
nginx.ingress.kubernetes.io/ssl-redirect: "true"
89+
nginx.ingress.kubernetes.io/proxy-body-size: 300m
90+
- op: add
91+
path: /spec/ingressClassName
92+
value: nginx
8393
image: openanalytics/shinyproxy:3.0.0
8494
imagePullPolicy: Always
8595
fqdn: shinyproxy-demo.local

docs/deployment/overlays/4-namespaced-multi/resources/shinyproxy2.shinyproxy.yaml

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -83,6 +83,16 @@ spec:
8383
- op: add
8484
path: /spec/serviceAccountName
8585
value: shinyproxy-sa
86+
kubernetesIngressPatches: |
87+
- op: add
88+
path: /metadata/annotations
89+
value:
90+
nginx.ingress.kubernetes.io/proxy-buffer-size: "128k"
91+
nginx.ingress.kubernetes.io/ssl-redirect: "true"
92+
nginx.ingress.kubernetes.io/proxy-body-size: 300m
93+
- op: add
94+
path: /spec/ingressClassName
95+
value: nginx
8696
image: openanalytics/shinyproxy:3.0.0
8797
imagePullPolicy: Always
8898
fqdn: shinyproxy-demo.local

docs/deployment/overlays/4-namespaced-multi/resources/shinyproxy3.shinyproxy.yaml

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -83,6 +83,16 @@ spec:
8383
- op: add
8484
path: /spec/serviceAccountName
8585
value: shinyproxy-sa
86+
kubernetesIngressPatches: |
87+
- op: add
88+
path: /metadata/annotations
89+
value:
90+
nginx.ingress.kubernetes.io/proxy-buffer-size: "128k"
91+
nginx.ingress.kubernetes.io/ssl-redirect: "true"
92+
nginx.ingress.kubernetes.io/proxy-body-size: 300m
93+
- op: add
94+
path: /spec/ingressClassName
95+
value: nginx
8696
image: openanalytics/shinyproxy:3.0.0
8797
imagePullPolicy: Always
8898
fqdn: shinyproxy-demo.local

src/main/kotlin/eu/openanalytics/shinyproxyoperator/components/IngressFactory.kt

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,8 @@ class IngressFactory(private val kubeClient: MixedOperation<Ingress, IngressList
3535

3636
private val logger = KotlinLogging.logger {}
3737

38+
private val ingressPatcher = IngressPatcher()
39+
3840
fun createOrReplaceIngress(shinyProxy: ShinyProxy, latestInstance: ShinyProxyInstance) {
3941
val labels = LabelFactory.labelsForShinyProxy(shinyProxy).toMutableMap()
4042
labels[LabelFactory.LATEST_INSTANCE_LABEL] = latestInstance.hashOfSpec
@@ -65,7 +67,8 @@ class IngressFactory(private val kubeClient: MixedOperation<Ingress, IngressList
6567
.build()
6668
//@formatter:on
6769

68-
val createdIngress = kubeClient.inNamespace(shinyProxy.metadata.namespace).resource(ingressDefinition).createOrReplace()
70+
val patchedIngress = ingressPatcher.patch(ingressDefinition, shinyProxy.parsedIngressPatches)
71+
val createdIngress = kubeClient.inNamespace(shinyProxy.metadata.namespace).resource(patchedIngress).createOrReplace()
6972
logger.debug { "${shinyProxy.logPrefix()} [Component/Ingress] Created ${createdIngress.metadata.name}" }
7073
}
7174

src/main/kotlin/eu/openanalytics/shinyproxyoperator/crd/ShinyProxy.kt

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -121,6 +121,23 @@ class ShinyProxy : CustomResource<JsonNode, ShinyProxyStatus>(), Namespaced {
121121
return@lazy null
122122
}
123123

124+
@get:JsonIgnore
125+
val parsedIngressPatches: JsonPatch? by lazy {
126+
if (spec.get("kubernetesIngressPatches")?.isTextual == true) {
127+
try {
128+
// convert the raw YAML string into a JsonPatch
129+
val yamlReader = ObjectMapper(YAMLFactory())
130+
yamlReader.registerModule(JSR353Module())
131+
return@lazy yamlReader.readValue(spec.get("kubernetesIngressPatches").textValue(), JsonPatch::class.java)
132+
} catch (exception: Exception) {
133+
exception.printStackTrace() // log the exception for easier debugging
134+
throw exception
135+
}
136+
137+
}
138+
return@lazy null
139+
}
140+
124141
@get:JsonIgnore
125142
val subPath: String by lazy {
126143
if (spec.get("server")?.get("servlet")?.get("context-path")?.isTextual == true) {

0 commit comments

Comments
 (0)