Skip to content

Commit 8eeb4eb

Browse files
author
Paulo Alberto Simoes
authored
[Feature] adoption of ingress traffic control (#167)
* remove vscode local configuration * ingress controller setup * jaeger setup changed to support ingress * cleanup oke setup script, removing loadbalancing provisioning * change main setup to provisioning NGINX Ingress Controller and Jaeger * change frontend service descriptor from LB to ClusterIP and http protocol * include frontend ingress object descriptor * change frontend deploy script to provisioning service and ingress objects * change frontend undeploy script to cleanup service and ingress * change main test script to obtain the ingress external IP * order helidon ingress declaration required for scaling test * change scaling test script to deploy ingress for test and get the external IP * adjust jaeger url * change main perf script to get ingress external ip * change polyglot perf script to get ingress external ip * removing inventory-springboot from deploy sequence
1 parent b22fd8e commit 8eeb4eb

20 files changed

+487
-52
lines changed

.gitignore

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -471,8 +471,9 @@ $RECYCLE.BIN/
471471
##
472472
## Visual Studio Code
473473
##
474+
.vscode/
474475
.vscode/*
475-
!.vscode/settings.json
476-
!.vscode/tasks.json
477-
!.vscode/launch.json
478-
!.vscode/extensions.json
476+
#!.vscode/settings.json
477+
#!.vscode/tasks.json
478+
#!.vscode/launch.json
479+
#!.vscode/extensions.json

grabdish/deploy.sh

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,8 @@
22
# Copyright (c) 2021 Oracle and/or its affiliates.
33
# Licensed under the Universal Permissive License v 1.0 as shown at https://oss.oracle.com/licenses/upl.
44

5-
MS="frontend-helidon order-helidon supplier-helidon-se inventory-helidon inventory-springboot"
5+
#MS="frontend-helidon order-helidon supplier-helidon-se inventory-helidon inventory-springboot"
6+
MS="frontend-helidon order-helidon supplier-helidon-se inventory-helidon"
67
for s in $MS; do
78
echo ________________________________________
89
echo "Deploying $s..."

grabdish/frontend-helidon/deploy.sh

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,3 +21,9 @@ if [ -z "$1" ]; then
2121
else
2222
kubectl apply -f <(istioctl kube-inject -f $SCRIPT_DIR/frontend-helidon-deployment-$CURRENTTIME.yaml) -n msdataworkshop
2323
fi
24+
25+
# Provision Frontend Service
26+
kubectl create -f $SCRIPT_DIR/frontend-service.yaml -n msdataworkshop
27+
28+
# Provision Frontend Ingress
29+
kubectl create -f $SCRIPT_DIR/frontend-ingress.yaml -n msdataworkshop
Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
2+
apiVersion: networking.k8s.io/v1
3+
kind: Ingress
4+
metadata:
5+
name: grabdish-frontend-ingress
6+
namespace: msdataworkshop
7+
annotations:
8+
kubernetes.io/ingress.class: "nginx"
9+
nginx.ingress.kubernetes.io/enable-rewrite-log: "true"
10+
#nginx.ingress.kubernetes.io/rewrite-target: /$1
11+
#nginx.ingress.kubernetes.io/backend-protocol: "https"
12+
#nginx.ingress.kubernetes.io/force-ssl-redirect: "true"
13+
#nginx.ingress.kubernetes.io/add-base-url: "true"
14+
spec:
15+
tls:
16+
- secretName: ssl-certificate-secret
17+
rules:
18+
- http:
19+
paths:
20+
- path: /
21+
pathType: Prefix
22+
backend:
23+
service:
24+
name: frontend
25+
port:
26+
number: 80

grabdish/frontend-helidon/frontend-service.yaml

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -8,14 +8,15 @@ metadata:
88
name: frontend
99
labels:
1010
app: frontend
11-
annotations:
12-
service.beta.kubernetes.io/oci-load-balancer-ssl-ports: "443"
13-
service.beta.kubernetes.io/oci-load-balancer-tls-secret: ssl-certificate-secret
11+
#annotations:
12+
# service.beta.kubernetes.io/oci-load-balancer-ssl-ports: "443"
13+
# service.beta.kubernetes.io/oci-load-balancer-tls-secret: ssl-certificate-secret
1414
spec:
15-
type: LoadBalancer
15+
#type: LoadBalancer
16+
type: ClusterIP
1617
ports:
17-
- port: 443
18-
name: https
18+
- port: 80
19+
name: http
1920
targetPort: 8080
2021
selector:
2122
app: frontend

grabdish/frontend-helidon/undeploy.sh

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,4 +5,11 @@
55

66
echo delete frontend deployment and service...
77

8+
# Delete Frontend Ingress
9+
kubectl delete -f $SCRIPT_DIR/frontend-ingress.yaml -n msdataworkshop
10+
11+
# Delete Frontend Service
12+
kubectl delete -f $SCRIPT_DIR/frontend-service.yaml -n msdataworkshop
13+
14+
815
kubectl delete deployment frontend-helidon -n msdataworkshop
Lines changed: 60 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,60 @@
1+
## nginx configuration
2+
## Ref: https://github.com/kubernetes/ingress-nginx/blob/master/docs/user-guide/nginx-configuration/index.md
3+
##
4+
controller:
5+
# https://github.com/kubernetes/ingress-nginx
6+
# https://github.com/kubernetes/ingress-nginx/blob/main/stable.txt
7+
# Adopting the last stable version : controller-v0.49.0
8+
image:
9+
tag: "v0.49.0"
10+
pullPolicy: Always
11+
12+
metrics:
13+
enabled: true
14+
15+
# Define requests resources to avoid probe issues due to CPU utilization in busy nodes
16+
# ref: https://github.com/kubernetes/ingress-nginx/issues/4735#issuecomment-551204903
17+
# Ideally, there should be no limits.
18+
# https://engineering.indeedblog.com/blog/2019/12/cpu-throttling-regression-fix/
19+
resources:
20+
# limits:
21+
# cpu: 200m
22+
# memory: 256Mi
23+
requests:
24+
cpu: 100m
25+
memory: 90Mi
26+
27+
service:
28+
annotations:
29+
service.beta.kubernetes.io/oci-load-balancer-ssl-ports: "443"
30+
service.beta.kubernetes.io/oci-load-balancer-tls-secret: ssl-certificate-secret
31+
service.beta.kubernetes.io/oci-load-balancer-shape: "flexible"
32+
service.beta.kubernetes.io/oci-load-balancer-shape-flex-min: "10"
33+
service.beta.kubernetes.io/oci-load-balancer-shape-flex-max: "100"
34+
35+
# enableHttp: false
36+
# enableHttps: true
37+
38+
## Set external traffic policy to: "Local" to preserve source IP on
39+
## providers supporting it
40+
## Ref: https://kubernetes.io/docs/tutorials/services/source-ip/#source-ip-for-services-with-typeloadbalancer
41+
externalTrafficPolicy: "Local"
42+
43+
# Must be either "None" or "ClientIP" if set. Kubernetes will default to "None".
44+
# Ref: https://kubernetes.io/docs/concepts/services-networking/service/#virtual-ips-and-service-proxies
45+
# sessionAffinity: ""
46+
47+
# specifies the health check node port (numeric port number) for the service. If healthCheckNodePort isn’t specified,
48+
# the service controller allocates a port from your cluster’s NodePort range.
49+
# Ref: https://kubernetes.io/docs/tasks/access-application-cluster/create-external-load-balancer/#preserving-the-client-source-ip
50+
# healthCheckNodePort: 0
51+
52+
# ports:
53+
# http: 80
54+
# https: 443
55+
56+
targetPorts:
57+
http: http
58+
https: http
59+
60+
# type: LoadBalancer
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
apiVersion: v1
2+
kind: Namespace
3+
metadata:
4+
name: ingress-nginx
5+
labels:
6+
app.kubernetes.io/name: ingress-nginx
7+
app.kubernetes.io/instance: ingress-nginx
Lines changed: 64 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,64 @@
1+
#!/bin/bash
2+
# Copyright (c) 2021 Oracle and/or its affiliates.
3+
# Licensed under the Universal Permissive License v 1.0 as shown at https://oss.oracle.com/licenses/upl.
4+
5+
# Fail on error
6+
set -e
7+
8+
# Add NGINX Ingress Controller Repo to Helm
9+
while ! state_done NGINX_HELM_REPO; do
10+
if helm repo add ingress-nginx https://kubernetes.github.io/ingress-nginx 2>$GRABDISH_LOG/nginx_repo_err; then
11+
helm repo update
12+
state_set_done NGINX_HELM_REPO
13+
else
14+
echo "Add NGINX to Helm Repo failed. Retrying..."
15+
cat $GRABDISH_LOG/nginx_repo_err
16+
sleep 10
17+
fi
18+
done
19+
20+
# Create Ingress NGINX Namespace
21+
while ! state_done NGINX_NAMESPACE; do
22+
if kubectl create -f $GRABDISH_HOME/ingress/nginx/ingress-nginx-namespace.yaml 2>$GRABDISH_LOG/nginx_ingress_ns_err; then
23+
state_set_done NGINX_NAMESPACE
24+
else
25+
echo "Failed to create Ingress NGINX namespace. Retrying..."
26+
sleep 5
27+
fi
28+
done
29+
30+
# Create SSL Secret
31+
while ! state_done SSL_SECRET_INGRESS; do
32+
if kubectl create secret tls ssl-certificate-secret --key $GRABDISH_HOME/tls/tls.key --cert $GRABDISH_HOME/tls/tls.crt -n ingress-nginx; then
33+
state_set_done SSL_SECRET_INGRESS
34+
else
35+
echo "Ingress SSL Secret creation failed. Retrying..."
36+
sleep 5
37+
fi
38+
done
39+
40+
# Provision Ingress Controller
41+
while ! state_done NGINX_INGRESS_SETUP; do
42+
if helm install ingress-nginx ingress-nginx/ingress-nginx --namespace ingress-nginx --values $GRABDISH_HOME/ingress/nginx/ingress-nginx-helm-values4oci.yaml 2>$GRABDISH_LOG/nginx_ingress_err; then
43+
state_set_done NGINX_INGRESS_SETUP
44+
else
45+
echo "Ingress Controller installation failed. Retrying..."
46+
cat $GRABDISH_LOG/nginx_ingress_err
47+
sleep 10
48+
fi
49+
done
50+
51+
52+
# Get LB ENDPOINT
53+
#ip_pattern='^([0-9]+)\.([0-9]+)\.([0-9]+)\.([0-9]+)$'
54+
#while ! state_done NGINX_LB_ENDPOINT; do
55+
# NGINX_LB_ENDPOINT=$(kubectl -n ingress-nginx get svc ingress-nginx-controller -o "go-template={{range .status.loadBalancer.ingress}}{{or .ip .hostname}}{{end}}")
56+
# if [[ ! $NGINX_LB_ENDPOINT == $ip_pattern ]]
57+
# state_set NGINX_LB_ENDPOINT "$NGINX_LB_ENDPOINT"
58+
# else
59+
# echo "Invalid IP [$NGINX_LB_ENDPOINT]"
60+
# exit
61+
# fi
62+
#done
63+
64+
state_set_done NGINX_INGRESS_SETUP_DONE

0 commit comments

Comments
 (0)