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. 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 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 nginx controller doesn't understand. This most basic implementation just returns
a 404 page: a 404 page:
```console ```console
$ kubectl create -f default-backend.yaml $ kubectl apply -f default-backend.yaml
replicationcontroller "default-http-backend" created 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 $ kubectl -n kube-system get po
service "default-http-backend" exposed
$ kubectl get po
NAME READY STATUS RESTARTS AGE 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 ## Controller
@ -24,18 +23,18 @@ default-http-backend-ppqdj 1/1 Running 0 1m
You can deploy the controller as follows: You can deploy the controller as follows:
```console ```console
$ kubectl create -f rc.yaml $ kubectl apply -f nginx-ingress-controller.yaml
replicationcontroller "nginx-ingress-controller" created deployment "nginx-ingress-controller" created
$ kubectl get po $ kubectl -n kube-system get po
NAME READY STATUS RESTARTS AGE NAME READY STATUS RESTARTS AGE
default-http-backend-ppqdj 1/1 Running 0 1m default-http-backend-2657704409-qgwdd 1/1 Running 0 2m
nginx-ingress-controller-vbgf9 0/1 ContainerCreating 0 2s nginx-ingress-controller-873061567-4n3k2 1/1 Running 0 42s
``` ```
Note the default settings of this controller: Note the default settings of this controller:
* serves a `/healthz` url on port 10254, as both a liveness and readiness probe * 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 ## 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. `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 You might also need to open a firewall-rule for ports 80/443 of the nodes the
controller is running on. controller is running on.

View file

@ -1,15 +1,16 @@
apiVersion: v1 apiVersion: extensions/v1beta1
kind: ReplicationController kind: Deployment
metadata: metadata:
name: default-http-backend name: default-http-backend
labels:
k8s-app: default-http-backend
namespace: kube-system
spec: spec:
replicas: 1 replicas: 1
selector:
app: default-http-backend
template: template:
metadata: metadata:
labels: labels:
app: default-http-backend k8s-app: default-http-backend
spec: spec:
terminationGracePeriodSeconds: 60 terminationGracePeriodSeconds: 60
containers: containers:
@ -34,3 +35,17 @@ spec:
requests: requests:
cpu: 10m cpu: 10m
memory: 20Mi 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 apiVersion: extensions/v1beta1
kind: ReplicationController kind: Deployment
metadata: metadata:
name: nginx-ingress-controller name: nginx-ingress-controller
labels: labels:
k8s-app: nginx-ingress-lb k8s-app: nginx-ingress-controller
namespace: kube-system
spec: spec:
replicas: 1 replicas: 1
selector:
k8s-app: nginx-ingress-lb
template: template:
metadata: metadata:
labels: labels:
k8s-app: nginx-ingress-lb k8s-app: nginx-ingress-controller
name: nginx-ingress-lb
spec: 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 terminationGracePeriodSeconds: 60
containers: containers:
- image: gcr.io/google_containers/nginx-ingress-controller:0.8.3 - image: gcr.io/google_containers/nginx-ingress-controller:0.8.3
name: nginx-ingress-lb name: nginx-ingress-controller
imagePullPolicy: Always imagePullPolicy: Always
readinessProbe: readinessProbe:
httpGet: httpGet:
@ -31,7 +34,11 @@ spec:
scheme: HTTP scheme: HTTP
initialDelaySeconds: 10 initialDelaySeconds: 10
timeoutSeconds: 1 timeoutSeconds: 1
# use downward API ports:
- containerPort: 80
hostPort: 80
- containerPort: 443
hostPort: 443
env: env:
- name: POD_NAME - name: POD_NAME
valueFrom: valueFrom:
@ -41,11 +48,6 @@ spec:
valueFrom: valueFrom:
fieldRef: fieldRef:
fieldPath: metadata.namespace fieldPath: metadata.namespace
ports:
- containerPort: 80
hostPort: 80
- containerPort: 443
hostPort: 443
args: args:
- /nginx-ingress-controller - /nginx-ingress-controller
- --default-backend-service=$(POD_NAMESPACE)/default-http-backend - --default-backend-service=$(POD_NAMESPACE)/default-http-backend