Add detailed example for NGINX-Ingress-Controller status page configuration
This commit is contained in:
parent
39807569a2
commit
c14b4f8a57
6 changed files with 240 additions and 0 deletions
103
examples/status-page/nginx/README.md
Normal file
103
examples/status-page/nginx/README.md
Normal file
|
@ -0,0 +1,103 @@
|
|||
Example configuration for configuring enabling Status Page on the NGINX Ingress Controller
|
||||
=========
|
||||
|
||||
# Create replica set and service definition for the default http backend
|
||||
```
|
||||
kubectl create -f default-backend-rc.yaml -f default-backend-svc.yaml
|
||||
```
|
||||
|
||||
# Create NGINX Ingress controller with the desired vts status page enabled option
|
||||
```
|
||||
kubectl create -f status-page-configmap.yaml -f status-page-rc.yaml
|
||||
```
|
||||
|
||||
# Expose ports externally
|
||||
The following example service configuration can be used to make services addressable outside of the Kubernetes cluster
|
||||
|
||||
* http endpoint: http://${NODE_IP}:32080
|
||||
* https endpoint: https://${NODE_IP}:32443
|
||||
* status endpoint: http://${NODE_IP}:32081
|
||||
|
||||
```
|
||||
kubectl create -f status-page-svc.yaml
|
||||
```
|
||||
|
||||
# Testing
|
||||
|
||||
IP 172.17.4.99 used here as an example
|
||||
|
||||
## Default endpoint
|
||||
### Browser
|
||||
|
||||
* http://172.17.4.99:32080/ will give 404 with "default backend - 404" content
|
||||
* http:///172.17.4.99:32080/healthz will give 200 with "ok" content
|
||||
|
||||
### CLI
|
||||
|
||||
```
|
||||
curl -v http://172.17.4.99:32080
|
||||
* Rebuilt URL to: http://172.17.4.99:32080/
|
||||
* Trying 172.17.4.99...
|
||||
* Connected to 172.17.4.99 (172.17.4.99) port 32080 (#0)
|
||||
> GET / HTTP/1.1
|
||||
> Host: 172.17.4.99:32080
|
||||
> User-Agent: curl/7.43.0
|
||||
> Accept: */*
|
||||
>
|
||||
< HTTP/1.1 404 Not Found
|
||||
< Server: nginx/1.11.3
|
||||
< Date: Thu, 22 Dec 2016 10:32:23 GMT
|
||||
< Content-Type: text/plain; charset=utf-8
|
||||
< Content-Length: 21
|
||||
< Connection: keep-alive
|
||||
< Strict-Transport-Security: max-age=15724800; includeSubDomains; preload
|
||||
<
|
||||
* Connection #0 to host 172.17.4.99 left intact
|
||||
|
||||
curl -v http://172.17.4.99:32080/healthz
|
||||
* Trying 172.17.4.99...
|
||||
* Connected to 172.17.4.99 (172.17.4.99) port 32080 (#0)
|
||||
> GET /healthz HTTP/1.1
|
||||
> Host: 172.17.4.99:32080
|
||||
> User-Agent: curl/7.43.0
|
||||
> Accept: */*
|
||||
>
|
||||
< HTTP/1.1 200 OK
|
||||
< Server: nginx/1.11.3
|
||||
< Date: Thu, 22 Dec 2016 10:31:36 GMT
|
||||
< Content-Type: text/plain; charset=utf-8
|
||||
< Content-Length: 2
|
||||
< Connection: keep-alive
|
||||
< Strict-Transport-Security: max-age=15724800; includeSubDomains; preload
|
||||
<
|
||||
* Connection #0 to host 172.17.4.99 left intact
|
||||
```
|
||||
|
||||
## Status page
|
||||
### Browser
|
||||
|
||||
http://172.17.4.99:32081/nginx_status/
|
||||
|
||||
### CLI
|
||||
|
||||
```
|
||||
curl -v http://172.17.4.99:32081/nginx_status/format/json
|
||||
* Trying 172.17.4.99...
|
||||
* Connected to 172.17.4.99 (172.17.4.99) port 32081 (#0)
|
||||
> GET /nginx_status/format/json HTTP/1.1
|
||||
> Host: 172.17.4.99:32081
|
||||
> User-Agent: curl/7.43.0
|
||||
> Accept: */*
|
||||
>
|
||||
< HTTP/1.1 200 OK
|
||||
< Server: nginx/1.11.3
|
||||
< Date: Thu, 22 Dec 2016 10:32:57 GMT
|
||||
< Content-Type: application/json
|
||||
< Content-Length: 2303
|
||||
< Connection: keep-alive
|
||||
<
|
||||
* Connection #0 to host 172.17.4.99 left intact
|
||||
{"nginxVersion":"1.11.3","loadMsec":1482401683372,"nowMsec":1482402243310,"connections":{"active":4,"reading":0,"writing":1,"waiting":3,"accepted":19,"handled":19,"requests":629},"serverZones":{"_":{"requestCounter":621,"inBytes":486167,"outBytes":597318,"responses":{"1xx":0,"2xx":620,"3xx":0,"4xx":1,"5xx":0,"miss":0,"bypass":0,"expired":0,"stale":0,"updating":0,"revalidated":0,"hit":0,"scarce":0},"overCounts":{"maxIntegerSize":18446744073709551615,"requestCounter":0,"inBytes":0,"outBytes":0,"1xx":0,"2xx":0,"3xx":0,"4xx":0,"5xx":0,"miss":0,"bypass":0,"expired":0,"stale":0,"updating":0,"revalidated":0,"hit":0,"scarce":0}},"testurl":{"requestCounter":7,"inBytes":3558,"outBytes":426201,"responses":{"1xx":0,"2xx":7,"3xx":0,"4xx":0,"5xx":0,"miss":0,"bypass":0,"expired":0,"stale":0,"updating":0,"revalidated":0,"hit":0,"scarce":0},"overCounts":{"maxIntegerSize":18446744073709551615,"requestCounter":0,"inBytes":0,"outBytes":0,"1xx":0,"2xx":0,"3xx":0,"4xx":0,"5xx":0,"miss":0,"bypass":0,"expired":0,"stale":0,"updating":0,"revalidated":0,"hit":0,"scarce":0}},"*":{"requestCounter":628,"inBytes":489725,"outBytes":1023519,"responses":{"1xx":0,"2xx":627,"3xx":0,"4xx":1,"5xx":0,"miss":0,"bypass":0,"expired":0,"stale":0,"updating":0,"revalidated":0,"hit":0,"scarce":0},"overCounts":{"maxIntegerSize":18446744073709551615,"requestCounter":0,"inBytes":0,"outBytes":0,"1xx":0,"2xx":0,"3xx":0,"4xx":0,"5xx":0,"miss":0,"bypass":0,"expired":0,"stale":0,"updating":0,"revalidated":0,"hit":0,"scarce":0}}},"upstreamZones":{"default-test-ui-8443":[{"server":"10.2.97.6:8443","requestCounter":7,"inBytes":3558,"outBytes":426201,"responses":{"1xx":0,"2xx":7,"3xx":0,"4xx":0,"5xx":0},"responseMsec":297,"weight":1,"maxFails":0,"failTimeout":0,"backup":false,"down":false,"overCounts":{"maxIntegerSize":18446744073709551615,"requestCounter":0,"inBytes":0,"outBytes":0,"1xx":0,"2xx":0,"3xx":0,"4xx":0,"5xx":0}}],"upstream-default-backend":[{"server":"10.2.90.238:8080","requestCounter":0,"inBytes":0,"outBytes":0,"responses":{"1xx":0,"2xx":0,"3xx":0,"4xx":0,"5xx":0},"responseMsec":0,"weight":1,"maxFails":0,"failTimeout":0,"backup":false,"down":false,"overCounts":{"maxIntegerSize":18446744073709551615,"requestCounter":0,"inBytes":0,"outBytes":0,"1xx":0,"2xx":0,"3xx":0,"4xx":0,"5xx":0}}]}}
|
||||
|
||||
```
|
||||
|
36
examples/status-page/nginx/default-backend-rc.yaml
Normal file
36
examples/status-page/nginx/default-backend-rc.yaml
Normal file
|
@ -0,0 +1,36 @@
|
|||
apiVersion: v1
|
||||
kind: ReplicationController
|
||||
metadata:
|
||||
name: default-http-backend
|
||||
spec:
|
||||
replicas: 1
|
||||
selector:
|
||||
k8s-app: default-http-backend
|
||||
template:
|
||||
metadata:
|
||||
labels:
|
||||
k8s-app: default-http-backend
|
||||
spec:
|
||||
terminationGracePeriodSeconds: 60
|
||||
containers:
|
||||
- name: default-http-backend
|
||||
# Any image is permissable as long as:
|
||||
# 1. It serves a 404 page at /
|
||||
# 2. It serves 200 on a /healthz endpoint
|
||||
image: gcr.io/google_containers/defaultbackend:1.0
|
||||
livenessProbe:
|
||||
httpGet:
|
||||
path: /healthz
|
||||
port: 8080
|
||||
scheme: HTTP
|
||||
initialDelaySeconds: 30
|
||||
timeoutSeconds: 5
|
||||
ports:
|
||||
- containerPort: 8080
|
||||
resources:
|
||||
limits:
|
||||
cpu: 10m
|
||||
memory: 20Mi
|
||||
requests:
|
||||
cpu: 10m
|
||||
memory: 20Mi
|
14
examples/status-page/nginx/default-backend-svc.yaml
Normal file
14
examples/status-page/nginx/default-backend-svc.yaml
Normal file
|
@ -0,0 +1,14 @@
|
|||
apiVersion: v1
|
||||
kind: Service
|
||||
metadata:
|
||||
name: default-http-backend
|
||||
labels:
|
||||
k8s-app: default-http-backend
|
||||
spec:
|
||||
ports:
|
||||
- port: 80
|
||||
targetPort: 8080
|
||||
protocol: TCP
|
||||
name: http
|
||||
selector:
|
||||
k8s-app: default-http-backend
|
6
examples/status-page/nginx/status-page-configmap.yaml
Normal file
6
examples/status-page/nginx/status-page-configmap.yaml
Normal file
|
@ -0,0 +1,6 @@
|
|||
apiVersion: v1
|
||||
data:
|
||||
enable-vts-status: "true"
|
||||
kind: ConfigMap
|
||||
metadata:
|
||||
name: nginx-conf-vts-enable
|
57
examples/status-page/nginx/status-page-rc.yaml
Normal file
57
examples/status-page/nginx/status-page-rc.yaml
Normal file
|
@ -0,0 +1,57 @@
|
|||
apiVersion: v1
|
||||
kind: ReplicationController
|
||||
metadata:
|
||||
name: nginx-ingress-controller
|
||||
labels:
|
||||
k8s-app: nginx-ingress-lb
|
||||
spec:
|
||||
replicas: 1
|
||||
selector:
|
||||
k8s-app: nginx-ingress-lb
|
||||
template:
|
||||
metadata:
|
||||
labels:
|
||||
k8s-app: nginx-ingress-lb
|
||||
name: nginx-ingress-lb
|
||||
spec:
|
||||
terminationGracePeriodSeconds: 60
|
||||
containers:
|
||||
- image: gcr.io/google_containers/nginx-ingress-controller:0.8.3
|
||||
name: nginx-ingress-lb
|
||||
imagePullPolicy: Always
|
||||
readinessProbe:
|
||||
httpGet:
|
||||
path: /healthz
|
||||
port: 10254
|
||||
scheme: HTTP
|
||||
livenessProbe:
|
||||
httpGet:
|
||||
path: /healthz
|
||||
port: 10254
|
||||
scheme: HTTP
|
||||
initialDelaySeconds: 10
|
||||
timeoutSeconds: 1
|
||||
# use downward API
|
||||
env:
|
||||
- name: POD_NAME
|
||||
valueFrom:
|
||||
fieldRef:
|
||||
fieldPath: metadata.name
|
||||
- name: POD_NAMESPACE
|
||||
valueFrom:
|
||||
fieldRef:
|
||||
fieldPath: metadata.namespace
|
||||
ports:
|
||||
- name: http-traffic
|
||||
containerPort: 80
|
||||
hostPort: 80
|
||||
- name: https-traffic
|
||||
containerPort: 443
|
||||
hostPort: 443
|
||||
- name: status-port
|
||||
containerPort: 18080
|
||||
hostPort: 18080
|
||||
args:
|
||||
- /nginx-ingress-controller
|
||||
- --default-backend-service=$(POD_NAMESPACE)/default-http-backend
|
||||
- --nginx-configmap=$(POD_NAMESPACE)/nginx-conf-vts-enable
|
24
examples/status-page/nginx/status-page-svc.yaml
Normal file
24
examples/status-page/nginx/status-page-svc.yaml
Normal file
|
@ -0,0 +1,24 @@
|
|||
apiVersion: v1
|
||||
kind: Service
|
||||
metadata:
|
||||
name: nginx-ingress-controller
|
||||
spec:
|
||||
type: NodePort
|
||||
ports:
|
||||
- port: 80
|
||||
targetPort: http-traffic
|
||||
nodePort: 32080
|
||||
protocol: TCP
|
||||
name: http
|
||||
- port: 443
|
||||
targetPort: https-traffic
|
||||
nodePort: 32443
|
||||
protocol: TCP
|
||||
name: https
|
||||
- port: 18080
|
||||
targetPort: status-port
|
||||
nodePort: 32081
|
||||
protocol: TCP
|
||||
name: status
|
||||
selector:
|
||||
k8s-app: nginx-ingress-lb
|
Loading…
Reference in a new issue