Skip to content

Commit

Permalink
Fixes: loklak#1410: Set up Nginx with Kubernetes
Browse files Browse the repository at this point in the history
  • Loading branch information
vibhcool committed Aug 9, 2017
1 parent 78b3112 commit a136aad
Show file tree
Hide file tree
Showing 15 changed files with 237 additions and 4 deletions.
18 changes: 16 additions & 2 deletions kubernetes/bin/deploy-development.sh
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
#!/bin/bash
export DIR=kubernetes

USAGE="USAGE: ./kubernetes/bin/deploy-development.sh create|delete"
USAGE="USAGE: ./kubernetes/bin/deploy-development.sh create|create all|delete|delete all"

if [ "$1" = "create" ]; then
echo "Creating objects from configurations."
Expand All @@ -11,14 +11,28 @@ if [ "$1" = "create" ]; then
kubectl create -R -f ${DIR}/yamls/development/elasticsearch/
echo "Waiting for server to start up. ~20s."
sleep 20
if [ "$2" = "all" ]; then
# Start KubeLego deployment for TLS certificates
kubectl create -R -f ${DIR}/yamls/lego
# Start nginx deployment, ingress & service
kubectl create -R -f ${DIR}/yamls/nginx
fi
# Create web namespace
kubectl create -R -f ${DIR}/yamls/web
echo "Creating loklak deployment"
# Create API server deployment and service for development branch
kubectl create -R -f ${DIR}/yamls/development/api-server/
echo "Trying to fetch public IP. ~40s."
sleep 40
kubectl get services --namespace=web
echo "Deployed loklak on Kubernetes"
elif [ "$1" = "delete" ]; then
echo "Deleting objects created from configurations"
echo "Clearing the cluster."
if [ "$2" = "all" ]; then
kubectl delete -f ${DIR}/yamls/lego/00-namespace.yml
kubectl delete -f ${DIR}/yamls/nginx/00-namespace.yml
fi
kubectl delete -f ${DIR}/yamls/web/00-namespace.yml
kubectl delete -R -f ${DIR}/yamls/development/ || true
echo "Deleted loklak project from Kubernetes"
elif [ -z "$1" ]; then
Expand Down
2 changes: 2 additions & 0 deletions kubernetes/yamls/development/api-server/api-deployment.yml
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,9 @@ spec:
path: /api/status.json
port: 80
initialDelaySeconds: 30
periodSeconds: 15
timeoutSeconds: 3
ports:
- containerPort: 80
- containerPort: 443
protocol: TCP
4 changes: 2 additions & 2 deletions kubernetes/yamls/development/api-server/api-service.yml
Original file line number Diff line number Diff line change
Expand Up @@ -6,9 +6,9 @@ metadata:
namespace: web
spec:
ports:
- port: 80
- port: 9000
protocol: TCP
targetPort: 80
targetPort: 9000
selector:
app: server
type: LoadBalancer
4 changes: 4 additions & 0 deletions kubernetes/yamls/lego/00-namespace.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
apiVersion: v1
kind: Namespace
metadata:
name: kube-lego
8 changes: 8 additions & 0 deletions kubernetes/yamls/lego/configmap.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
apiVersion: v1
metadata:
name: kube-lego
namespace: kube-lego
data:
lego.email: "vibhorverma1995@gmail.com"
lego.url: "https://acme-v01.api.letsencrypt.org/directory"
kind: ConfigMap
43 changes: 43 additions & 0 deletions kubernetes/yamls/lego/deployment.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,43 @@
apiVersion: apps/v1beta1
kind: Deployment
metadata:
name: kube-lego
namespace: kube-lego
spec:
replicas: 1
template:
metadata:
labels:
app: kube-lego
spec:
containers:
- name: kube-lego
image: jetstack/kube-lego:0.1.4
imagePullPolicy: Always
ports:
- containerPort: 8080
env:
- name: LEGO_EMAIL
valueFrom:
configMapKeyRef:
name: kube-lego
key: lego.email
- name: LEGO_URL
valueFrom:
configMapKeyRef:
name: kube-lego
key: lego.url
- name: LEGO_NAMESPACE
valueFrom:
fieldRef:
fieldPath: metadata.namespace
- name: LEGO_POD_IP
valueFrom:
fieldRef:
fieldPath: status.podIP
readinessProbe:
httpGet:
path: /api/status.json
port: 8080
initialDelaySeconds: 5
timeoutSeconds: 1
4 changes: 4 additions & 0 deletions kubernetes/yamls/nginx/00-namespace.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
apiVersion: v1
kind: Namespace
metadata:
name: nginx-ingress
17 changes: 17 additions & 0 deletions kubernetes/yamls/nginx/configmap.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
#
# nginx ingress controller config
# @ref https://github.com/kubernetes/ingress/blob/master/controllers/nginx/configuration.md
#
apiVersion: v1
data:
proxy-connect-timeout: "15"
proxy-read-timeout: "600"
proxy-send-imeout: "600"
hsts-include-subdomains: "false"
body-size: "64m"
server-name-hash-bucket-size: "256"
server-tokens: "false"
kind: ConfigMap
metadata:
namespace: nginx-ingress
name: nginx
31 changes: 31 additions & 0 deletions kubernetes/yamls/nginx/default-deployment.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
apiVersion: apps/v1beta1
kind: Deployment
metadata:
name: default-http-backend
namespace: nginx-ingress
spec:
replicas: 1
template:
metadata:
labels:
app: default-http-backend
spec:
containers:
- name: default-http-backend
image: gcr.io/google_containers/defaultbackend:1.0
livenessProbe:
httpGet:
path: /api/status.json
port: 8080
scheme: HTTP
initialDelaySeconds: 30
timeoutSeconds: 5
ports:
- containerPort: 8080
resources:
limits:
cpu: 10m
memory: 20Mi
requests:
cpu: 10m
memory: 20Mi
12 changes: 12 additions & 0 deletions kubernetes/yamls/nginx/default-service.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
apiVersion: v1
kind: Service
metadata:
name: default-http-backend
namespace: nginx-ingress
spec:
ports:
- port: 80
targetPort: 8080
protocol: TCP
selector:
app: default-http-backend
40 changes: 40 additions & 0 deletions kubernetes/yamls/nginx/deployment.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,40 @@
apiVersion: apps/v1beta1
kind: Deployment
metadata:
name: nginx
namespace: nginx-ingress
spec:
replicas: 1
template:
metadata:
labels:
app: nginx
spec:
containers:
- image: gcr.io/google_containers/nginx-ingress-controller:0.8.3
name: nginx
imagePullPolicy: Always
env:
- name: POD_NAME
valueFrom:
fieldRef:
fieldPath: metadata.name
- name: POD_NAMESPACE
valueFrom:
fieldRef:
fieldPath: metadata.namespace
livenessProbe:
httpGet:
path: /api/status.json
port: 8080
scheme: HTTP
initialDelaySeconds: 30
periodSeconds: 10
timeoutSeconds: 5
ports:
- containerPort: 80
- containerPort: 443
args:
- /nginx-ingress-controller
- --default-backend-service=nginx-ingress/default-http-backend
- --nginx-configmap=nginx-ingress/nginx
17 changes: 17 additions & 0 deletions kubernetes/yamls/nginx/service.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
apiVersion: v1
kind: Service
metadata:
name: nginx
namespace: nginx-ingress
annotations:
service.beta.kubernetes.io/external-traffic: "OnlyLocal"
spec:
type: LoadBalancer
loadBalancerIP: '35.190.235.2'
ports:
- port: 80
name: http
- port: 443
name: https
selector:
app: nginx
4 changes: 4 additions & 0 deletions kubernetes/yamls/web/00-namespace.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
apiVersion: v1
kind: Namespace
metadata:
name: web
16 changes: 16 additions & 0 deletions kubernetes/yamls/web/ingress-notls.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: web-notls
namespace: web
annotations:
kubernetes.io/ingress.class: "nginx"
spec:
rules:
- host: api.loklak.org
http:
paths:
- path: /
backend:
serviceName: api-server
servicePort: 9000
21 changes: 21 additions & 0 deletions kubernetes/yamls/web/ingress-tls.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: web
namespace: web
annotations:
kubernetes.io/tls-acme: "true"
kubernetes.io/ingress.class: "nginx"
spec:
tls:
- hosts:
- api.loklak.org
secretName: loklak-api-tls
rules:
- host: api.loklak.org
http:
paths:
- path: /
backend:
serviceName: api-server
servicePort: 9000

0 comments on commit a136aad

Please sign in to comment.