Skip to content

Commit 701f1f6

Browse files
authored
Merge branch 'main' into chart-rbac-knob
2 parents 87769a6 + f37f598 commit 701f1f6

File tree

7 files changed

+162
-28
lines changed

7 files changed

+162
-28
lines changed

build/Dockerfile

+1-1
Original file line numberDiff line numberDiff line change
@@ -294,7 +294,7 @@ RUN --mount=type=secret,id=nginx-repo.crt,dst=/etc/ssl/nginx/nginx-repo.crt,mode
294294
&& dnf clean all
295295

296296
############################################# Base image for UBI with NGINX Plus and App Protect WAF & DoS #############################################
297-
FROM redhat/ubi8@sha256:f4292f415f60632a0ff9c0646c4fa859d8b2e1e88a16faa90c6decd1951aea88 as ubi-8-plus-nap
297+
FROM redhat/ubi8@sha256:2a5d23450fb9b0cb266b4d465b36f1d1bc7c9b5a9b785528215b470b44f04209 as ubi-8-plus-nap
298298
ARG NAP_MODULES
299299

300300
RUN --mount=type=secret,id=nginx-repo.crt,dst=/etc/ssl/nginx/nginx-repo.crt,mode=0644 \

examples/custom-resources/grpc-upstreams/README.md

+59-27
Original file line numberDiff line numberDiff line change
@@ -5,32 +5,64 @@ grpc** field to an upstream. The protocol defaults to http if left unset.
55

66
## Prerequisites
77

8-
- HTTP/2 must be enabled. See `http2` ConfigMap key in the
9-
[ConfigMap](https://docs.nginx.com/nginx-ingress-controller/configuration/global-configuration/configmap-resource/#listeners)
10-
11-
- VirtualServer and VirtualServerRoute resources for gRPC applications must include TLS termination.
12-
13-
## Example
14-
15-
```yaml
16-
apiVersion: k8s.nginx.org/v1
17-
kind: VirtualServer
18-
metadata:
19-
name: grpc-vs
20-
spec:
21-
host: grpc.example.com
22-
tls:
23-
secret: grpc-secret
24-
upstreams:
25-
- name: grpc1
26-
service: grpc-svc
27-
port: 50051
28-
type: grpc
29-
routes:
30-
- path: /helloworld.Greeter
31-
action:
32-
pass: grpc1
8+
1. HTTP/2 must be enabled using the `http2` [ConfigMap key](https://docs.nginx.com/nginx-ingress-controller/configuration/global-configuration/configmap-resource/#listeners).
9+
10+
2. Configure TLS termination for VirtualServer and VirtualServerRoute resources.
11+
12+
3. A working [`grpcurl`](https://github.com/fullstorydev/grpcurl) installation.
13+
14+
4. [Install NGINX Ingress Controller using Manifests](https://docs.nginx.com/nginx-ingress-controller/installation/installation-with-manifests/)
15+
16+
5. Save the public IP address of NGINX Ingress Controller into a shell variable:
17+
18+
```shell
19+
IC_IP=XXX.YYY.ZZZ.III
20+
```
21+
22+
6. Save the HTTPS port of NGINX Ingress Controller into a shell variable:
23+
24+
```shell
25+
IC_HTTPS_PORT=<port number>
26+
```
27+
28+
## Step 1 - Update ConfigMap with `http2: "true"`
29+
30+
```shell
31+
kubectl apply -f nginx-config
3332
```
3433

35-
*grpc-svc* is a service for the gRPC application. The service becomes available at the `/helloworld.Greeter` path. Note
36-
how we used the **type: grpc** field in the Upstream configuration.
34+
## Step 2 - Deploy the Cafe Application
35+
36+
Create the coffee and the tea deployments and services:
37+
38+
```shell
39+
kubectl apply -f greeter-app.yaml
40+
```
41+
42+
## Step 3 - Configure TLS termination and Load balancing
43+
44+
1. Create the secret with the TLS certificate and key:
45+
46+
```shell
47+
kubectl create -f greeter-secret.yaml
48+
```
49+
50+
2. Create the VirtualServer resource:
51+
52+
```shell
53+
kubectl create -f greeter-virtual-server.yaml
54+
```
55+
56+
## Step 4 - Test the Configuration
57+
58+
Access the application using `grpcurl`. Use the `-insecure` flag to turn off certificate verification for the self-signed certificate.
59+
60+
```shell
61+
grpcurl -insecure -proto helloworld.proto -authority greeter.example.com $IC_IP:$IC_HTTPS_PORT helloworld.Greeter/SayHello
62+
```
63+
64+
```shell
65+
{
66+
"message": "Hello"
67+
}
68+
```
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
apiVersion: apps/v1
2+
kind: Deployment
3+
metadata:
4+
name: grpc
5+
spec:
6+
replicas: 1
7+
selector:
8+
matchLabels:
9+
app: greeter
10+
template:
11+
metadata:
12+
labels:
13+
app: greeter
14+
spec:
15+
containers:
16+
- name: greeter
17+
image: ghcr.io/nginxinc/kic-test-grpc-server:0.2.1
18+
ports:
19+
- containerPort: 50051
20+
---
21+
apiVersion: v1
22+
kind: Service
23+
metadata:
24+
name: grpc-svc
25+
spec:
26+
ports:
27+
- port: 50051
28+
targetPort: 50051
29+
protocol: TCP
30+
name: grpc
31+
selector:
32+
app: greeter
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
apiVersion: v1
2+
kind: Secret
3+
metadata:
4+
name: greeter-secret
5+
type: kubernetes.io/tls
6+
data:
7+
tls.crt: LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUVEVENDQXZXZ0F3SUJBZ0lVSHFKaFE1TklPN3ZwSDMwc0JHUXZCZWNxZWlFd0RRWUpLb1pJaHZjTkFRRUwKQlFBd2daVXhDekFKQmdOVkJBWVRBa2xGTVEwd0N3WURWUVFJREFSRGIzSnJNUTB3Q3dZRFZRUUhEQVJEYjNKcgpNUTR3REFZRFZRUUtEQVZPUjBsT1dERU9NQXdHQTFVRUN3d0ZUa2RKVGxneEl6QWhCZ05WQkFNTUduWnBjblIxCllXd3RjMlZ5ZG1WeUxtVjRZVzF3YkdVdVkyOXRNU013SVFZSktvWklodmNOQVFrQkZoUnJkV0psY201bGRHVnoKUUc1bmFXNTRMbU52YlRBZUZ3MHlNekV3TXpFeE5EQXlNRE5hRncweU5ERXdNekF4TkRBeU1ETmFNSUdWTVFzdwpDUVlEVlFRR0V3SkpSVEVOTUFzR0ExVUVDQXdFUTI5eWF6RU5NQXNHQTFVRUJ3d0VRMjl5YXpFT01Bd0dBMVVFCkNnd0ZUa2RKVGxneERqQU1CZ05WQkFzTUJVNUhTVTVZTVNNd0lRWURWUVFEREJwMmFYSjBkV0ZzTFhObGNuWmwKY2k1bGVHRnRjR3hsTG1OdmJURWpNQ0VHQ1NxR1NJYjNEUUVKQVJZVWEzVmlaWEp1WlhSbGMwQnVaMmx1ZUM1agpiMjB3Z2dFaU1BMEdDU3FHU0liM0RRRUJBUVVBQTRJQkR3QXdnZ0VLQW9JQkFRQy84ZHlLU3gxdHVCRm44dWErCkd6cllCRUhteDkzL0UycUhhVUdNajNHdkZJalJOQ2Z2eUdnaHFGaGNweVVWWEVtWjhKQmVjV0FzZDFZNHJkaTkKaFhSL0ZneVFMMXZFVjFrR2poYklQMmhPMnc5em9rTDRsWU5tZ3UwdUsvZlJtSU1vNnMveDN0YklvOE9ueGdVSApBQ3lzL2RXVkpnVTA1Y0ZxTCtZY0NFRGxHTGxwWFBsdUxJbkgvQklBN1k1T1VTaXdIYlFjZUQxUlpScitKcXR3CmQxN1BpcGRtZHdQbzMyelR1ZW9CY1ZlNldIaWhIb0JyY2FCanBuUUJWZG9Raks0azJHVUs3cHY2dkttNWZBUnAKUkUycS9RVHlMOEhVeWZqVHoxejQrazZ2R2xCa09rWjhzK0RlSms0SmJYRWhUdzM4YitHaE1pYWczMjFTR2ptbgp6elpMQWdNQkFBR2pVekJSTUIwR0ExVWREZ1FXQkJTYlRyNWhWWTRsd1F3WEx4RjZUMjFZTHF2empEQWZCZ05WCkhTTUVHREFXZ0JTYlRyNWhWWTRsd1F3WEx4RjZUMjFZTHF2empEQVBCZ05WSFJNQkFmOEVCVEFEQVFIL01BMEcKQ1NxR1NJYjNEUUVCQ3dVQUE0SUJBUUNFa2cwZUpiOVRHMkdsU2llQVZObThWQ01abGdXdXd1QzF5UUQ0U0U3ZworL0RoRXMzc0JIamoxS1NSUnE2NHJtVHlOTFJGN3FyTDZJVjNmRmRwRUtNRFVEM0RxR25hbUVzV001K0Z0U1A3CmU2SnVVNkZGV0NxMDk4UHVWczd2WkUwbk5mdTZ4c2twdnNuUlZVQlVsTmhJOE5QK1FXSDBCejRtWGYxd3dRQ1YKUFRsNUFoQ25yZG1JNGNkSVVkWjJpREJscEQwelRFdVNVS1RtRldVaVlzS29xMEVWdTRBZVN1bGdGeTdEc1ZXbQo4Y3o1Smh3dEU3WXlqT3UySGRTNXVGOExBdUVhTDZ4c24xSDcveXhzYThHUVRJUmt6eU41UXF5SllrSlZCU0hnClA1Ri91WHB4ekFsSG1rTThGckd4OEFJVzZKQk8wcDgwd0lYK3JVeDZtdjlkCi0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0K
8+
tls.key: LS0tLS1CRUdJTiBQUklWQVRFIEtFWS0tLS0tCk1JSUV2UUlCQURBTkJna3Foa2lHOXcwQkFRRUZBQVNDQktjd2dnU2pBZ0VBQW9JQkFRQy84ZHlLU3gxdHVCRm4KOHVhK0d6cllCRUhteDkzL0UycUhhVUdNajNHdkZJalJOQ2Z2eUdnaHFGaGNweVVWWEVtWjhKQmVjV0FzZDFZNApyZGk5aFhSL0ZneVFMMXZFVjFrR2poYklQMmhPMnc5em9rTDRsWU5tZ3UwdUsvZlJtSU1vNnMveDN0YklvOE9uCnhnVUhBQ3lzL2RXVkpnVTA1Y0ZxTCtZY0NFRGxHTGxwWFBsdUxJbkgvQklBN1k1T1VTaXdIYlFjZUQxUlpScisKSnF0d2QxN1BpcGRtZHdQbzMyelR1ZW9CY1ZlNldIaWhIb0JyY2FCanBuUUJWZG9Raks0azJHVUs3cHY2dkttNQpmQVJwUkUycS9RVHlMOEhVeWZqVHoxejQrazZ2R2xCa09rWjhzK0RlSms0SmJYRWhUdzM4YitHaE1pYWczMjFTCkdqbW56elpMQWdNQkFBRUNnZ0VBRENYdXhkMUJoR1N6eS94RHlLdG8ydGJRenZPVHVYcjM4VHNOcllEcCtvdnIKcVlYMHN4M2dJcVV6ZG5zVHJlN3Aya2JaOUVoQkJIOXh1R09mQmZFR01hdy92azVwQkp1eCtaSzducnFOOWxPeAovaWtQdGw1TUhlR255T3Q2ZUtHcVIzTFpGMTlQQVEyRnFyN1lmdkZ1dDhJc1VZOXNTKy93cTdEOVk0VWkzNmVkCklCY3BLL2d0eFZFUWRkOFI5NStLSEVXS1ZBQWJkSFRlZTBZblNUZ2VaM2tzTUR4a0ZzT1NOR3ZnYUcxQTI0cGUKMHQzSWpkY21kRVE3ZmJHS1ljaWV6d21kMUFHSE5tSC9pU0s5VlN5OW1xeWFFazgyb2dCRW15UCtmd3FKcnkrNwppTmRZVmR3VXNXdE9rdFNIcWw1TmhZR2VhMDhXb3ZCdzZHdzFrQmRlS1FLQmdRRDluY2QvUVF5dlgzUXRRSU9zCkl5SjcyUXBFVlFidDhhaFBleUcwZGhIUk9RZFpSZnBUUlVJM05kVGU5YVNRczgwZWFKd3hDZWxOVW5MZGl2emQKbnRoZHI2cmtmWXJhOHp0NnMwMnRZZnFKSXFFVTRBenpmazVZOEQ4amlFR3FITUhza3NiS2ZRTzl4U3B5Vkl1MgpMNlhzYVZPK2ZXNk1qWTdVY1NjL1REbHNpUUtCZ1FEQnY3SVQvaEtyN3lrT09HOCtEbWtielV0ZzlDYldyYmhRCldtRWd4NjRMY0FGdGEyaTBNRTJLM3loUks4Vkt1ZHJRVGkwU0lLYzgzOE50c1BLa0gvZThqeDFYRHk3b3V2c04KaGViWEtZN29Gb2xnN2ZEV2VMT3dqR095SzdVQ0VvVW5SRzVDR3FJdmM2RGY1OENicGdGbFpSN2d5VFlxZWI0eQo3V2k5RitvZk13S0JnREppa2l1NTVLZENzM1g2Qnk2L25DNDJwRStIQk9Wb3lTTmhOd1QvSC9NTS9XVEMva1JrCjBnN2Q1dmlVbktrU3o0Rm5Ed0MvRTFhRk5zVEV4QS9UYXZEUjRZV2JXMmE4UStqUWpuSVBzUkpsaXRMMjRCdlAKMEFqalVlZmhQZ3BweEMwWHk5NldqNU80QkFMS3dTYmt1SFlMUnRQbFgzMFU4bmRLTTUzanF0VGhBb0dCQUtybwpnWnJYTGZ0UzdlRm9jT0RKNzNnaDRWTjJLK2lGdDZmU0FnbmJlckVHTFl3ckNtS2dsVlppUWZ0UVpDbmx4cHFuCnkyUkpQNTBZT2hsQjFOaG9ocTFqaFZzdHZwQjNtRXcyaVFuVjFBVHhGR0JYcEhKY2FRM2MyWGpxeXpJM3loTjQKYnRhTERmUlR5RjZhM2JHdmYxM0ZGTGJ2WjRPU2Z2QUhzclBUSzZnM0FvR0FjaU5xVlJYVG9FOFpaVkcxZkhlYwp2YzhPS1FDeXk1dmdtczJ0elZkRE9vM2F5c3hYRnVQUUpxSWNFS2lMb3pMckRHeU9NMmloaFhvaUF5NmFCR0ZyCnNsTng2akFiRXo4VFNsa2J0N21zUTRUZVk2QU4rdDhoZE1sNENTSU9vWHF2VFBnZFYzTkxWOVdibHFmbUpMTXkKTGtITVphTm8rV2p0OHkzR0NTc2lTR2s9Ci0tLS0tRU5EIFBSSVZBVEUgS0VZLS0tLS0K
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
apiVersion: k8s.nginx.org/v1
2+
kind: VirtualServer
3+
metadata:
4+
name: cafe
5+
spec:
6+
host: greeter.example.com
7+
tls:
8+
secret: greeter-secret
9+
upstreams:
10+
- name: grpc
11+
service: grpc-svc
12+
port: 50051
13+
type: grpc
14+
routes:
15+
- path: "/helloworld.Greeter"
16+
action:
17+
pass: grpc
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
// Copyright 2015 gRPC authors.
2+
//
3+
// Licensed under the Apache License, Version 2.0 (the "License");
4+
// you may not use this file except in compliance with the License.
5+
// You may obtain a copy of the License at
6+
//
7+
// http://www.apache.org/licenses/LICENSE-2.0
8+
//
9+
// Unless required by applicable law or agreed to in writing, software
10+
// distributed under the License is distributed on an "AS IS" BASIS,
11+
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12+
// See the License for the specific language governing permissions and
13+
// limitations under the License.
14+
15+
syntax = "proto3";
16+
17+
option go_package = "google.golang.org/grpc/examples/helloworld/helloworld";
18+
option java_multiple_files = true;
19+
option java_package = "io.grpc.examples.helloworld";
20+
option java_outer_classname = "HelloWorldProto";
21+
22+
package helloworld;
23+
24+
// The greeting service definition.
25+
service Greeter {
26+
// Sends a greeting
27+
rpc SayHello (HelloRequest) returns (HelloReply) {}
28+
}
29+
30+
// The request message containing the user's name.
31+
message HelloRequest {
32+
string name = 1;
33+
}
34+
35+
// The response message containing the greetings
36+
message HelloReply {
37+
string message = 1;
38+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
kind: ConfigMap
2+
apiVersion: v1
3+
metadata:
4+
name: nginx-config
5+
namespace: nginx-ingress
6+
data:
7+
http2: "true"

0 commit comments

Comments
 (0)