Update the nginx controller manifests to run in the kube-system namespace, be deployments and some general cleanup

This commit is contained in:
Lucas Käldström 2017-01-05 09:40:40 +02:00
parent 567fa3b456
commit 4f3e5b77d3
No known key found for this signature in database
GPG key ID: 3FA3783D77751514
3 changed files with 51 additions and 38 deletions

View file

@ -1,4 +1,4 @@
# Deploying an Nginx Ingress controller
# Deploying the Nginx Ingress controller
This example aims to demonstrate the deployment of an nginx ingress controller.
@ -7,16 +7,15 @@ This example aims to demonstrate the deployment of an nginx ingress controller.
The default backend is a Service capable of handling all url paths and hosts the
nginx controller doesn't understand. This most basic implementation just returns
a 404 page:
```console
$ kubectl create -f default-backend.yaml
replicationcontroller "default-http-backend" created
$ kubectl apply -f default-backend.yaml
deployment "default-http-backend" created
service "default-http-backend" created
$ kubectl expose rc default-http-backend --port=80 --target-port=8080 --name=default-http-backend
service "default-http-backend" exposed
$ kubectl get po
$ kubectl -n kube-system get po
NAME READY STATUS RESTARTS AGE
default-http-backend-ppqdj 1/1 Running 0 1m
default-http-backend-2657704409-qgwdd 1/1 Running 0 28s
```
## Controller
@ -24,18 +23,18 @@ default-http-backend-ppqdj 1/1 Running 0 1m
You can deploy the controller as follows:
```console
$ kubectl create -f rc.yaml
replicationcontroller "nginx-ingress-controller" created
$ kubectl apply -f nginx-ingress-controller.yaml
deployment "nginx-ingress-controller" created
$ kubectl get po
$ kubectl -n kube-system get po
NAME READY STATUS RESTARTS AGE
default-http-backend-ppqdj 1/1 Running 0 1m
nginx-ingress-controller-vbgf9 0/1 ContainerCreating 0 2s
default-http-backend-2657704409-qgwdd 1/1 Running 0 2m
nginx-ingress-controller-873061567-4n3k2 1/1 Running 0 42s
```
Note the default settings of this controller:
* serves a `/healthz` url on port 10254, as both a liveness and readiness probe
* takes a `--default-backend-service` arg pointing to a Service, created above
* takes a `--default-backend-service` argument pointing to the Service created above
## Running on a cloud provider
@ -44,6 +43,3 @@ the provider also has a native Ingress controller and set the annotation
`kubernetes.io/ingress.class: nginx` in all Ingresses meant for this controller.
You might also need to open a firewall-rule for ports 80/443 of the nodes the
controller is running on.

View file

@ -1,15 +1,16 @@
apiVersion: v1
kind: ReplicationController
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
name: default-http-backend
labels:
k8s-app: default-http-backend
namespace: kube-system
spec:
replicas: 1
selector:
app: default-http-backend
template:
metadata:
labels:
app: default-http-backend
k8s-app: default-http-backend
spec:
terminationGracePeriodSeconds: 60
containers:
@ -34,3 +35,17 @@ spec:
requests:
cpu: 10m
memory: 20Mi
---
apiVersion: v1
kind: Service
metadata:
name: default-http-backend
namespace: kube-system
labels:
k8s-app: default-http-backend
spec:
ports:
- port: 80
targetPort: 8080
selector:
k8s-app: default-http-backend

View file

@ -1,23 +1,26 @@
apiVersion: v1
kind: ReplicationController
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
name: nginx-ingress-controller
labels:
k8s-app: nginx-ingress-lb
k8s-app: nginx-ingress-controller
namespace: kube-system
spec:
replicas: 1
selector:
k8s-app: nginx-ingress-lb
template:
metadata:
labels:
k8s-app: nginx-ingress-lb
name: nginx-ingress-lb
k8s-app: nginx-ingress-controller
spec:
# hostNetwork makes it possible to use ipv6 and to preserve the source IP correctly regardless of docker configuration
# however, it is not a hard dependency of the nginx-ingress-controller itself and it may cause issues if port 10254 already is taken on the host
# that said, since hostPort is broken on CNI (https://github.com/kubernetes/kubernetes/issues/31307) we have to use hostNetwork where CNI is used
# like with kubeadm
# hostNetwork: true
terminationGracePeriodSeconds: 60
containers:
- image: gcr.io/google_containers/nginx-ingress-controller:0.8.3
name: nginx-ingress-lb
name: nginx-ingress-controller
imagePullPolicy: Always
readinessProbe:
httpGet:
@ -31,7 +34,11 @@ spec:
scheme: HTTP
initialDelaySeconds: 10
timeoutSeconds: 1
# use downward API
ports:
- containerPort: 80
hostPort: 80
- containerPort: 443
hostPort: 443
env:
- name: POD_NAME
valueFrom:
@ -41,11 +48,6 @@ spec:
valueFrom:
fieldRef:
fieldPath: metadata.namespace
ports:
- containerPort: 80
hostPort: 80
- containerPort: 443
hostPort: 443
args:
- /nginx-ingress-controller
- --default-backend-service=$(POD_NAMESPACE)/default-http-backend